如何检查二进制类型的表列是否有值?

时间:2018-11-26 10:07:54

标签: sql asp.net gridview

“下载”命令显示在所有行的前面,我只想将其显示给数据库中附加了PDF文件的那些行。

protected void gvupdationsummary_SelectedIndexChanged(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(st);
    con.Open();
    SqlCommand com = new SqlCommand("select [name],[data] from [Pragati].[dbo].[Pragati_Status_Updations] where Pragati_no=@Pragati_no", con);
    com.Parameters.AddWithValue("Pragati_no", gvupdationsummary.SelectedRow.Cells[3].Text);
    SqlDataReader dr = com.ExecuteReader();

    if (dr.Read())
    {
        Response.Clear();
        Response.Buffer = true;

        //Response.ContentType = dr["type"].ToString();
        Response.AddHeader("content-disposition", "attachment;filename=" + dr["name"].ToString());
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.BinaryWrite((byte[])dr["data"]);
        Response.End();
    }
    else
    {
        // ...
    }
}

2 个答案:

答案 0 :(得分:1)

您显示的代码似乎已经进行了实际的PDF下载。您无法采取任何措施防止显示下载按钮或链接。

相反,您需要更改为gvupdationsummary提供数据的SQL查询,并在其中添加诸如HasPDF之类的列,如下所示:

SELECT /* your columns */ ,
       CAST(CASE WHEN [data] IS NULL THEN 0 ELSE 1 END AS BIT) AS HasPDF
FROM   ....
WHERE  ....

然后,在网格渲染代码中,可以使用布尔值 HasPDF 决定是否应显示“下载”按钮。

使用这种方法,您不必在每次渲染网格时都将所有PDF二进制数据从数据库不必要地传输到应用程序。

答案 1 :(得分:0)

您可以使用SQLDataReader的{​​{1}}方法查看该列是否包含不存在或缺失的值。

IsDBNull