从数据库中检索图像时出错

本文关键字:出错 图像 检索 数据库 | 更新日期: 2023-09-27 18:31:22

我的sql数据库中有图像表,其中包含三列名称id,名称和图像。当我尝试检索图像时,它在第一行显示错误:

"对象引用未设置为对象的实例。"

我想在下拉列表中查看图像的名称,在图像控件中查看图像的名称。

SqlConnection con = new SqlConnection("Data Source=LOCALHOST''SQLEXPRESS;Initial Catalog=testdb;Integrated Security=True");
        //SqlConnection con = new SqlConnection("Data Source=(localdb)'v11.0;Initial Catalog=tempdb;Integrated Security=True");
        protected void Page_Load(object sender, EventArgs e)
        {
            con.Open();
        SqlCommand cm = new SqlCommand("select * from image where name='" + DropDownList1.SelectedItem.ToString() + "'", con);
        SqlDataAdapter da = new SqlDataAdapter(cm);
        SqlDataReader dr = cm.ExecuteReader();
        try
        {
            if (dr.Read())
            {
                string image1 = Convert.ToString(DateTime.Now.ToFileTime());
                FileStream fs1 = new FileStream(image1, FileMode.CreateNew, FileAccess.Write);
                byte[] bimage1 = (byte[])dr["name"];
                fs1.Write(bimage1, 0, bimage1.Length - 1);
                fs1.Flush();
                Image1.ImageUrl = "~/Images/" + DropDownList1.SelectedItem.ToString();
                Image1.Visible = true;
            }
            dr.Close();
            con.Close();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

从数据库中检索图像时出错

如果您在 SqlCommand 行上收到 NullReferenceException,则 DropDownList1.SelectedItem 可能为空。在空对象上调用 ToString 会给出此 NullReferenceException 请尝试调试您的程序并将鼠标悬停在您的 SelectedItem 上以查看其是否为空

你应该改变代码:

var index= DropDownList1.SelectedItem!=null?DropDownList1.SelectedItem.ToString():d efaultitem;

然后在该查询中,您可以使用索引。

你在这里做了一些很奇怪的事情。看起来您正在尝试将映像写入磁盘,但您指定的字节是从名称列转换的?

byte[] bimage1 = (byte[])dr["name"];
fs1.Write(bimage1, 0, bimage1.Length - 1);

如果图像的 URL 保存在数据库中,则需要先使用 WebClient 下载图像的字节数,然后才能将图像写出。看起来您也试图通过将 url 分配给图像控件来显示图像。但是,异常可能是因为下拉列表中没有选定的项目。

我认为您需要替换以下内容

 SqlCommand cm = new SqlCommand("select * from image where name='" + DropDownList1.SelectedItem.ToString() + "'", con);

SqlCommand cm = new SqlCommand("select * from image where name='" + Convert.ToString(DropDownList1.SelectedValue) + "'", con);

这可能不会给你预期的记录,但它不会给你错误..试试吧!!