Compo Nulo - ASP.NET
Prezados:
Ao tentar exibir em uma Label um campo oriundo de uma base de dados access, que contém valor NULO, estou recebendo uma mensagem de erro (O operador '=' não está definido para tipo 'DBNull' e seqüência de caracteres "F".). Entendo que na base de dados o campo está com valor nulo, mas como faço a comparação de um valor nulo aqui no ASP?
A linha que está dando a mensagem de erro é a seguinte:
<asp:Label ID="lblAV1B1" runat="server" Text='<%#if(Eval("FaltaAv1B1")="F", Eval("FaltaAv1B1"), If(IsNumeric(Eval("Av1B1")), If(Eval("Av1B1") <> 0, Eval("Av1B1"), "-"), "-"))%>' />
Indemberge
Indemberge Santos
Curtidas 0
Respostas
Luiz Maia
13/07/2009
Ola Indemberg,
Para comparação de campos de banco de dados com valores nulos, vc deve usar:
DBNull.Value
Segue um exemplo: SELECT * From Items where Author = @Author SQLiteParameter authorParameter = new SQLiteParameter("@Author");
authorParameter.Value = (author != null) ? (object)author : DBNull.Value;
insertValue.Parameters.Add(authorParameter); Abraços Att Luiz Maia
Segue um exemplo: SELECT * From Items where Author = @Author SQLiteParameter authorParameter = new SQLiteParameter("@Author");
authorParameter.Value = (author != null) ? (object)author : DBNull.Value;
insertValue.Parameters.Add(authorParameter); Abraços Att Luiz Maia
GOSTEI 0
Indemberge Santos
13/07/2009
Luiz;
Fiz da forma que me explicou contudo continuo recebendo mensagem de erro.
Descrição: Erro ao compilar um recurso necessário para atender esta solicitação. Examine os detalhes específicos do erro e modifique o código fonte apropriadamente.
Mensagem de Erro do Compilador: BC30452: O operador '=' não está definido para os tipos 'Object' e 'System.DBNull'.
Alteração feita no meu código ASP.NET: <asp:Label ID="lblAV1B1" runat="server" Text='<%#if(Eval("FaltaAv1B1")=dbNull.Value,"",if(Eval("FaltaAv1B1")="F", Eval("FaltaAv1B1"), If(IsNumeric(Eval("Av1B1")), If(Eval("Av1B1") <> 0, Eval("Av1B1"), "-"), "-")))%>' /> Indemberge
Mensagem de Erro do Compilador: BC30452: O operador '=' não está definido para os tipos 'Object' e 'System.DBNull'.
Alteração feita no meu código ASP.NET: <asp:Label ID="lblAV1B1" runat="server" Text='<%#if(Eval("FaltaAv1B1")=dbNull.Value,"",if(Eval("FaltaAv1B1")="F", Eval("FaltaAv1B1"), If(IsNumeric(Eval("Av1B1")), If(Eval("Av1B1") <> 0, Eval("Av1B1"), "-"), "-")))%>' /> Indemberge
GOSTEI 0
Luiz Maia
13/07/2009
Vc usa C# ou VB?
DBNull.Value é case sensitive tb.
Aguardo
Luiz Maia
GOSTEI 0
Indemberge Santos
13/07/2009
Luiz;
Eu programo em VB.Net, mas o que estou precisando é passar esse dado para um ListView, e o teste que faço é no código ASP, entendeu?
Alterei a linha para o seguinte:
(Se o conteúdo for Nulo, a propriedade text do objeto deve ser "", senão verifico se o conteúdo é um "F" ou um número e passo esse valor para a propriedade text)
<asp:Label ID="lblAV1B1" runat="server" Text='<%#if(Eval("FaltaAv1B1")=DBNull.Value,"",if(Eval("FaltaAv1B1")="F", Eval("FaltaAv1B1"), If(IsNumeric(Eval("Av1B1")), If(Eval("Av1B1") <> 0, Eval("Av1B1"), "-"), "-")))%>' />
Da forma que estou fazendo estou recebendo a seguinte mensagem:
Mensagem de Erro do Compilador: BC30452: O operador '=' não está definido para os tipos 'Object' e 'System.DBNull'.
Indemberge
Indemberge
GOSTEI 0
Luiz Maia
13/07/2009
Indemberg,
Não sei exato quando ao VB, mas no C# comparação é fieta usando dois sinais de igual, tipo assim:
if (valor1 == DBNull.Value)
Veja se funciona alterando isto ai,
Aguardo
Att
Luiz Maia
GOSTEI 0
Indemberge Santos
13/07/2009
Luiz;
O meu problema não está relacionado a linguagem Vb.Net ou C#, o meu problema é no código ASP e ao objeto Listview, se fosse no Vb conseguiríamos resolver com a função IsNull, ou se eu estivesse utilizando um Gridview não teríamos problema, pelo menos não tive até agora.
Vou explicar o que eu fiz:
1) Coloquei um Listview em uma página ASP, defini colunas e campos que devem ser exibidos.
2) No load da página (.aspx.vb) utilizo um método para popular meu listview, segue código abaixo:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim ObjAluno As New ClassAluno
Dim ObjBoletimER As New ClassBoletimER
FvwDadosAluno.DataSource = ObjAluno.ObterAlunoCodigo(Session("Nome"))
FvwDadosAluno.DataBind()
'Vou informar o Cdigo da Turma que o Aluno pertence
lblTurma.Text = Request.Params("Cod1")
lblAnoLetivo.Text = Request.Params("Cod2")
lblSequencia.Text = Request.Params("Cod3")
lvwBoletim.DataSource = ObjBoletimER.ObterBoletimAlunoTurma(Session("Nome"), Request.Params("Cod1"), Request.Params("Cod2"), Request.Params("Cod3"))
lvwBoletim.DataBind()
End Sub
3) Quando o aluno falta a uma avaliação devo exibir um "F", se o campo for nulo de exibir um expaço em branco, se a nota que foi lançada para a avaliação em questão (página .aspx):
<asp:Label ID="lblAV1B1" runat="server" Text='<%#if(Eval("FaltaAv1B1")==DBNull.Value,"-",if(Eval("FaltaAv1B1")="F", Eval("FaltaAv1B1"), If(IsNumeric(Eval("Av1B1")), If(Eval("Av1B1") <> 0, Eval("Av1B1"), "-"), "-")))%>' />
Indemberge
GOSTEI 0
Indemberge Santos
13/07/2009
Luiz;
Consegui, descobri uma função chamada IsDBNull que retorna verdadeiro ou false em caso de campos nulos, então meu código ASP ficou assim:
<asp:Label ID="lblAV1B1" runat="server" Text='<%#if(IsDBNull(Eval("FaltaAv1B1")),"-",if(Eval("FaltaAv1B1")="F", Eval("FaltaAv1B1"), If(IsNumeric(Eval("Av1B1")), If(Eval("Av1B1") <> 0, Eval("Av1B1"), "-"), "-")))%>' />
Muito obrigado pela ajuda.
Indemberge
GOSTEI 0
Luiz Maia
13/07/2009
Falou Indemberg, precisando é so falar, estamos a sua disposição, ok?
Abraços
Att
Luiz Maia
GOSTEI 0