C# 如何解决图像的空值问题

C# 如何解决图像的空值问题,c#,asp.net,C#,Asp.net,我的数据库表中有redImage和whiteImage。它们的数据类型是image。还有,二值图像。我想在gridview中显示它们 SqlDataAdapter da= new SqlDataAdapter("SELECT ballID, gameLevel,

我的数据库表中有redImage和whiteImage。它们的数据类型是image。还有,二值图像。我想在gridview中显示它们

SqlDataAdapter da= new SqlDataAdapter("SELECT 
                                         ballID,
                                         gameLevel,
                                         gameChapter,
                                         redImage,
                                         whiteImage 
                                      from 
                                         colourGame 
                                       WHERE 
                                         gameLevel = '"+ ddlLevel.Text+"' 
                                         AND gameChapter = '"+ddlChapter.Text+"' ", cn);
ddlLevel和ddlChapter是下拉列表

ddlLevel.Items.Add("3");
        ddlLevel.Items.Add("4");


        ddlChapter.Items.Add("1");
        ddlChapter.Items.Add("2");
        ddlChapter.Items.Add("3");
        ddlChapter.Items.Add("4");
        ddlChapter.Items.Add("5");
在我的数据库表数据中,如果redImage有image,则whiteImage将为NULL,反之亦然

因此,我遇到了一个关于空值的错误

编辑:

你可以这样写:

<asp:Image ID="imgWhite" Url='<%# Eval("Image") == DBNull.Value ? "" : Eval("Image") %>'></asp:Image>

同样,您必须绑定映像。

如果只处理数据库中的空值,而只返回有效映像,会怎么样

请注意查询中的合并。这将只返回第一个非空值

编辑:(合并为空字符串,而不是第二个图像)

关于SQL注入的评论是真实的,您需要这样做

编辑#2:处理您的错误。这是未经测试的,但请测试
img
以查看其DBNull是否为空

return new MemoryStream((byte[])img);
改为:

If(img.GetType() == typeof(System.DBNull)) return new MemoryStream();
return new MemoryStream((byte[])img);
您应该尝试IsNULL()


如果redImage为空,则whiteImage具有图像。当redImage有图像时,whiteImage是空的。为什么不把它存储在
图像
列中,并添加一个
侧边
字符列,将其设置为
R(ed)
W(hite)
?如果是这样的话,就需要做很多工作,因为这是Windows Phone中我的游戏链接。还有别的办法吗?嗨,史瑞曼特!如果redImage为空,则whiteImage具有图像。当redImage有图像时,whiteImage为空。因此,在我的处理程序中,“无法将'System.DBNull'类型的对象强制转换为'System.Byte[]”类型。如何解决空值问题?我希望它在我的gridview中为空。@刘家辉看到我的Editi paqogomez,我仍然在我的处理程序中收到相同的错误“无法将类型为'System.DBNull'的对象强制转换为类型为'System.Byte[]”。在这个项目中,我需要有一个空的在redImage和一个图像在whiteImage,反之亦然。很明显,你不想要一个空的,它的空是给你的问题。请参阅我的编辑,了解另一个解决方案。@LiuJiaHui确保您不会错过我添加的逗号。谢谢paqogomez。但是还是发生了同样的错误。@LiuJiaHui您需要发布更多的代码。您只显示sql,因此我们只能使用sql提供帮助。张贴您的下拉列表代码。嗨,Vikash,您的解决方案不起作用。仍然发生相同的错误。您知道如何将空图像值设置为“0”吗?在我的处理程序中,它将返回我的图像值,但是,如果它为null,则会发生错误。然后您必须在网格视图中手动处理它。检查图像列是否为null,然后不要将任何图像绑定到图像控件。
return new MemoryStream((byte[])img);
If(img.GetType() == typeof(System.DBNull)) return new MemoryStream();
return new MemoryStream((byte[])img);
SqlDataAdapter da= new SqlDataAdapter("SELECT 
                                     ballID,
                                     gameLevel,
                                     gameChapter,
                                     IsNULL(redImage,'')[redImage],
                                     IsNULL(whiteImage,'')[whiteImage] 
                                  from 
                                     colourGame 
                                   WHERE 
                                     gameLevel = '"+ ddlLevel.Text+"' 
                                     AND gameChapter = '"+ddlChapter.Text+"' ", cn);