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

时间:2013-09-13 12:32:35

标签: c# asp.net visual-studio-2012

我的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;
        }
    }

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你应该改变代码:

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

这可能不会给你你想要的记录,但它不会给你错误..试试!!