我的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;
}
}
答案 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);
这可能不会给你你想要的记录,但它不会给你错误..试试!!