如何求解图像的空值

本文关键字:空值 图像 何求解 | 更新日期: 2023-09-27 18:33:53

我的数据库表中有redImage和whiteImage。它们的数据类型是图像。还有,二进制图像。我想在网格视图中显示它们。

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 有图像,则 whiteImage 将为 NULL,反之亦然。

因此,我遇到了有关空值的错误。

如何求解图像的空值

如果您只是处理数据库中的 null 并且只返回有效图像怎么办?

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

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

SqlDataAdapter da= new SqlDataAdapter("SELECT 
                                     ballID,
                                     gameLevel,
                                     gameChapter,
                                     coalesce(redImage,'') as [redImage],
                                     coalesce(whiteImage, '') as [whiteImage]
                                  from 
                                     colourGame 
                                   WHERE 
                                     gameLevel = '"+ ddlLevel.Text+"' 
                                     AND gameChapter = '"+ddlChapter.Text+"' ", cn);

关于SQL注入的评论是真实的,您需要参数化此查询。

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

return new MemoryStream((byte[])img);

更改为:

If(img.GetType() == typeof(System.DBNull)) return new MemoryStream();
return new MemoryStream((byte[])img);

编辑:

你可以把它写成:

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

首先,阅读有关SQL注入的信息。

在 Rowdatabound 上,您必须将该图像和下拉列表绑定到 gridview,然后只有它会显示。

例如。

    protected void gvUserInfo_RowDataBound(object sender, GridViewRowEventArgs e)
    {
    DropDownList ddl = (DropDownList)gvUserInfo.FindControl("yourControlName");
    string ddlValue = ddl.SelectedItem.Value;
    TextBox txtUserInfo = (TextBox) gvUserInfo.FindControl("yourControlName");
    string strValue = txtUserInfo.Text;
    Image imgCtrl = (Image) args.Row.FindControl("imgCtrl");
    imgCtrl.ImageUrl = m_ConcatUrl;
    }

以同样的方式,您必须绑定图像。

你应该试试IsNULL()。

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);