none
Problemas identificando NULL RRS feed

  • Pergunta

  • Boa tarde pessoal!!!

     

    Antes de mais nada, desejo a todos um excelente carnaval.

    Agora ao problema: Escrevi uma rotina para meu Profile Provider customizado, que usa oracle, e ele possui uma foto do usuário, que resgato com a função abaixo:

    public object GetFoto(int uniqueID, bool isAuthenticated)

    {

    byte[] Foto = null;

    OracleConnection conn = new OracleConnection(connectionString);

    OracleCommand cmd = new OracleCommand("select pu.bl_foto_pu from perfisusuarios pu " +

    "where pu.n_id_pu = :UniqueID", conn);

    cmd.Parameters.Add("UniqueID", OracleType.Number).Value = uniqueID;

    if (isAuthenticated)

    {

    try

    {

    conn.Open();

    Foto = (byte[])(cmd.ExecuteScalar());

    }

    catch (Exception e)

    {

    if (pWriteExceptionsToEventLog)

    {

    Utils.WriteToEventLog(e, "GetFoto", eventSource, eventLog, exceptionMessage);

    throw new ProviderException(exceptionMessage);

    }

    else

    {

    throw e;

    }

    }

    finally

    {

    conn.Close();

    }

    }

    return Foto;

    }

    O que acontece, é que ele levanta exceção que não consegue converter System.DBNull em Byte[] quando a tupla da tabela de dados possui valor nulo.

    Alguém conhece alguma maneira otimizada que poderia realizar a conversão e, caso venha nulo, ele deixe minha variável array de bytes nula????

     

    Obrigado a todos.

    sexta-feira, 16 de fevereiro de 2007 19:40

Respostas

  • Amigo,

    Eu recomendo que vc faça isso atraves de uma procedure mais também pode criar uma variavel do tipo object e setar retorno da sua select pra ela e depois testar se ela tem valor e caso tenha vc convert.



    Espero ter ajudado.


    []'s
    sábado, 17 de fevereiro de 2007 18:05
  • Ola,

    Tente algo do tipo:

    object tempFoto = cmd.ExecuteScalar();
    if(tempFoto != null)
        byte[] foto = (byte[])tempFoto;

    terça-feira, 20 de fevereiro de 2007 21:15
    Moderador

Todas as Respostas

  • Amigo,

    Eu recomendo que vc faça isso atraves de uma procedure mais também pode criar uma variavel do tipo object e setar retorno da sua select pra ela e depois testar se ela tem valor e caso tenha vc convert.



    Espero ter ajudado.


    []'s
    sábado, 17 de fevereiro de 2007 18:05
  • Com que função eu converteria? usando somente o typecast ou existe algum método da classe Convert que me retorne um array de bytes?
    terça-feira, 20 de fevereiro de 2007 15:29
  • Ola,

    Tente algo do tipo:

    object tempFoto = cmd.ExecuteScalar();
    if(tempFoto != null)
        byte[] foto = (byte[])tempFoto;

    terça-feira, 20 de fevereiro de 2007 21:15
    Moderador