TRATAR NULL VB.NET
Prezados.
Tenho um consulta no banco de dados e ora um ou outro campo retorna com null,o que é bem natural. E estou tratando da seguinte maneira:
If Not rd.IsDBNull(rd.GetOrdinal([Ô]logradouro[Ô])) Then
txtLogradouro.Text = rd.GetString([Ô]logradouro[Ô]).ToString
Else
txtLogradouro.Text = String.Empty
End If
Isso dá certo, mas to achando muito [Ô]Trabalhoso[Ô], pois tenho consultas com mais de 15 campos a serem preenchidos e praticamente repito isso para todos eles.
Alguém tem uma ideia melhor para tratar NULL quando vindo de uma consulta no banco de dados?
Sei que seria mais fácil tratar diretamente no SELECT, mas prefiro fazer isso no código.
Obrigado !
Tenho um consulta no banco de dados e ora um ou outro campo retorna com null,o que é bem natural. E estou tratando da seguinte maneira:
If Not rd.IsDBNull(rd.GetOrdinal([Ô]logradouro[Ô])) Then
txtLogradouro.Text = rd.GetString([Ô]logradouro[Ô]).ToString
Else
txtLogradouro.Text = String.Empty
End If
Isso dá certo, mas to achando muito [Ô]Trabalhoso[Ô], pois tenho consultas com mais de 15 campos a serem preenchidos e praticamente repito isso para todos eles.
Alguém tem uma ideia melhor para tratar NULL quando vindo de uma consulta no banco de dados?
Sei que seria mais fácil tratar diretamente no SELECT, mas prefiro fazer isso no código.
Obrigado !
O Null é tratado para a mesma tabela? Você pode criar uma Sub e chamar ela, por exemplo:
Public Sub Null1()
If Not rd.IsDBNull(rd.GetOrdinal([Ô]logradouro[Ô])) Then
txtLogradouro.Text = rd.GetString([Ô]logradouro[Ô]).ToString
Else
txtLogradouro.Text = String.Empty
End If
End Sub
Ao executar alguma verificação, ao invés de digitar todo esse código toda vez que precisar usa - lo, basta chamar o Null1() que ele fara isso pra você!
Public Sub Null1()
If Not rd.IsDBNull(rd.GetOrdinal([Ô]logradouro[Ô])) Then
txtLogradouro.Text = rd.GetString([Ô]logradouro[Ô]).ToString
Else
txtLogradouro.Text = String.Empty
End If
End Sub
Ao executar alguma verificação, ao invés de digitar todo esse código toda vez que precisar usa - lo, basta chamar o Null1() que ele fara isso pra você!
Use um método de extensão, que além de tratar null, ainda elimina o uso dos [Ô]GetOrdinal[Ô]:
Agora o método [Ô]SafeGetString[Ô] pode ser chamado à partir de qualquer classe que implemente IDataReader. Este método é para campos do tipo String(Varchar), portanto para outros métodos como GetInt32, GetDouble, GetDate e etc, métodos correspondentes podem ser criados e eles também estarão disponÃveis para seu DataReader. Para usar é algo como:
<System.Runtime.CompilerServices.Extension> _
Public Shared Function SafeGetString(reader As SqlDataReader, coluna As String) As String
If Not reader.IsDBNull(colIndex) Then
Return reader.GetString(reader.GetOrdinal(colIndex))
Else
Return String.Empty
End If
End Function
Agora o método [Ô]SafeGetString[Ô] pode ser chamado à partir de qualquer classe que implemente IDataReader. Este método é para campos do tipo String(Varchar), portanto para outros métodos como GetInt32, GetDouble, GetDate e etc, métodos correspondentes podem ser criados e eles também estarão disponÃveis para seu DataReader. Para usar é algo como:
txtCliente.Text = SqlReader.SafeGetString([Ô]NomeCliente[Ô])
Mouser e Kerplunk, obrigado pelo retorno.
Vou testar aqui e depois dou um retorno para vocês, mas valeu pela ajuda !
[]s
Vou testar aqui e depois dou um retorno para vocês, mas valeu pela ajuda !
[]s
Kerplunk.
Optei pelo exemplo que me enviou e deu certinho, fiz uma pequena alteração declarando a variável colIndex conforme segue abaixo. Caso esteja errado me corrija por favor.
<System.Runtime.CompilerServices.Extension> _
Public Function SafeGetString(reader As MySqlDataReader, coluna As String) As String
Dim colIndex As Integer = reader.GetOrdinal(coluna)
If Not reader.IsDBNull(colIndex) Then
Return reader.GetString(reader.GetOrdinal(colIndex))
Else
Return String.Empty
End If
End Function
Optei pelo exemplo que me enviou e deu certinho, fiz uma pequena alteração declarando a variável colIndex conforme segue abaixo. Caso esteja errado me corrija por favor.
<System.Runtime.CompilerServices.Extension> _
Public Function SafeGetString(reader As MySqlDataReader, coluna As String) As String
Dim colIndex As Integer = reader.GetOrdinal(coluna)
If Not reader.IsDBNull(colIndex) Then
Return reader.GetString(reader.GetOrdinal(colIndex))
Else
Return String.Empty
End If
End Function
Está certinho. Agora, você pode usar esse método em qualquer DataReader ou classe que implemente IDataReader. Você pode também fazer métodos para cada tipo de dados, esse é para string, mas você pode fazer para integer, double, datetime ou qualquer outro numa boa e usando praticamente o mesmo código. Métodos de extensão tem um poder que só depois que começamos à usar que percebemos. Eu uso vários deles, incluindo métodos para trabalhar com XML e JSON. Serializa e desserializa, tanto de string como de arquivos e chamadas de WebAPI. O bacana é que com isso, basta eu criar a classe, implementar os métodos e pronto, trabalho com JSON e XML de boa sem stress.
Aproveitando a deixa RSRS,
KERPLUNK, funciona também com data do MySQL?
KERPLUNK, funciona também com data do MySQL?
Ops, foi mal, não prestei atenção direito, cancela minha pergunta, pois meu problema é na hora de passar data com valor null pro DataReader, mas isso já arrumei rsrsrs
Tópico encerrado , respostas não são mais permitidas