Hello guys,
I'm saving my images directly to the database and I'm trying to display these images in my DataGrid. When the records have registered images, everything works fine, but when the field is null, it gives the following error:
An exception of type 'System.InvalidCastException' occurred in System.Web.dll but was not handled in user code
Cannot convert an object of type 'System.DBNull' to type 'System.Byte[]'.
How can I fix this?
Private Sub PovoaTipoDocumento()
Dim Ds As Data.DataSet
Ds = TipoDocumento.ConsultaGenerica(" SELECT A.ID, A.NOME, " &
" ARQUIVOIMAGEM = (SELECT X.ARQUIVOIMAGEM FROM PESSOASDOCUMENTOS X " &
" WHERE X.TIPODOCUMENTOID = A.ID AND PESSOAID = " & ViewState("vlID") & "), " &
" " &
" TAMANHOIMAGEM = (SELECT X.TAMANHOIMAGEM FROM PESSOASDOCUMENTOS X " &
" WHERE X.TIPODOCUMENTOID = A.ID AND PESSOAID = " & ViewState("vlID") & "), " &
" " &
" IMGDOC = ISNULL((SELECT X.DIRETORIOVIRTUAL + X.NOMEARQUIVO FROM PESSOASDOCUMENTOS X " &
" WHERE X.TIPODOCUMENTOID = A.ID " &
" AND PESSOAID = " & ViewState("vlID") & "), '../imagens/ladrilhoVazio.png'), " &
" " &
" ARQUIVO = ISNULL((SELECT X.NOMEARQUIVO FROM PESSOASDOCUMENTOS X " &
" WHERE X.TIPODOCUMENTOID = A.ID " &
" AND PESSOAID = " & ViewState("vlID") & "), ''), " &
" " &
" CAMINHODOARQUIVO = ISNULL((SELECT X.DIRETORIOFISICO + X.NOMEARQUIVO FROM PESSOASDOCUMENTOS X " &
" WHERE X.TIPODOCUMENTOID = A.ID " &
" AND PESSOAID = " & ViewState("vlID") & "), ''), " &
" " &
" VERIMGDOC = CASE WHEN (SELECT X.DIRETORIOVIRTUAL + X.NOMEARQUIVO FROM PESSOASDOCUMENTOS X " &
" WHERE X.TIPODOCUMENTOID = A.ID " &
" AND PESSOAID = " & ViewState("vlID") & ") IS NULL THEN 'False' ELSE 'True' END, " &
" " &
" VERUPLOAD = CASE WHEN (SELECT X.DIRETORIOVIRTUAL + X.NOMEARQUIVO FROM PESSOASDOCUMENTOS X " &
" WHERE X.TIPODOCUMENTOID = A.ID " &
" AND PESSOAID = " & ViewState("vlID") & ") IS NULL THEN 'True' ELSE 'False' END " &
" FROM TIPOSDOCUMENTOS A ")
DataGrid1.DataSource = Ds
DataGrid1.DataBind()
End Sub
Private Sub SalvaArquivo(ByVal pFileUpload As WebControls.FileUpload, ByVal pTipoDoc As Integer, ByVal pNomeTipoDoc As String)
If pFileUpload.HasFile Then
If CheckFileExtensions(pFileUpload.FileName) = True Then
Dim pArquivo As Byte() = pFileUpload.FileBytes
Dim pTipo As String = pFileUpload.PostedFile.ContentType
Dim pTamanho As Long = pFileUpload.PostedFile.ContentLength
Dim pNomeArquivo As String = pFileUpload.PostedFile.FileName
Dim pExtensao As String = System.IO.Path.GetExtension(pNomeArquivo).ToLower()
If pTamanho <= 50000000 Then
With Anexos
.ID = 0
.PESSOAID = ViewState("vlID") 'hfID.Value
.TIPODOCUMENTOID = pTipoDoc
.DIRETORIOFISICO = Trim("-")
.DIRETORIOVIRTUAL = Trim("-")
.NOMEARQUIVO = Trim(pNomeArquivo)
.EXTENSAO = Trim(pExtensao)
.ARQUIVOIMAGEM = pArquivo
.TAMANHOIMAGEM = pTamanho
End With
Anexos.Inserir()
Else
If pTamanho > 50000000 Then
lbMensagens.Items.Add("A imagem " & pNomeArquivo & " é muito grande.")
End If
End If
End If
End If
End Sub
This is the line that is getting the error:
<asp:Image ID="gImage" CssClass="imgDoc" runat="server" ImageUrl='<%# "data:image/jpg;base64," & Convert.ToBase64String(CType(DataBinder.Eval(Container, "DataItem .IMAGEFILE"), Byte())) %>' />
Grateful,
Ilano.