从数据库中检索图像时出错
本文关键字:出错 图像 检索 数据库 | 更新日期: 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);
这可能不会给你预期的记录,但它不会给你错误..试试吧!!