我使用的是windows窗体,我编写了一个代码,用于在选择组合框值时从图片框中的数据库中获取图像。当选择组合框值并显示数据(只显示有图像的数据(时,我的代码工作正常。但是我有一个没有图像的数据,当我选择组合框值来显示没有图像的信息时,它会显示一个"错误"-"参数无效"。
我试过它的条件,但代码对我不起作用。
这是代码。。。
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
using (SQLiteConnection conn = new SQLiteConnection("Data Source=combolist.db;Version=3;"))
{
string CommandText = "SELECT * FROM combo WHERE [Id]=@id";
using (SQLiteCommand cmd = new SQLiteCommand(CommandText, conn))
{
cmd.Parameters.AddWithValue("@id", comboBox1.SelectedItem.ToString());
conn.Open();
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
textBox1.Text = dr["Id"].ToString();
textBox2.Text = dr["FirstName"].ToString();
textBox3.Text = dr["LastName"].ToString();
textBox4.Text = dr["Age"].ToString();
textBox5.Text = dr["Address"].ToString();
byte[] img = (byte[])(dr["Pic"]);
if (img == null)
{
pictureBox1.Image = null;
}
else
{
MemoryStream ms = new MemoryStream(img);
pictureBox1.Image = System.Drawing.Image.FromStream(ms);
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
请帮忙。。。。
如果值为null,此强制转换byte[] img = (byte[])(dr["Pic"]);
将抛出错误。
我会检查dr["Pic"] != null
,然后:
if(dr["Pic"] != null){
MemoryStream ms = new MemoryStream((byte[])(dr["Pic"]));
pictureBox1.Image = ms != null ? System.Drawing.Image.FromStream(ms) : null;
} else {
pictureBox1.Visible = false;
//or pictureBox1.Image = null;
}
更新:这:cmd.Parameters.AddWithValue("@id", comboBox1.SelectedItem.ToString());
应该是cmd.Parameters.AddWithValue("@id", comboBox1.SelectedValue.ToString());