我有从我观看的教程中复制的代码,我们的代码在教程中非常相似。
当演示者运行代码时,它运行正常,但是当我尝试运行与教程中相同的代码时,我收到错误“参数无效”。
请帮忙
private void Viewbutton_Click(object sender, EventArgs e)
{
conection.Open();
string sqlQuery = "select studnum, course, f_name, l_name, color_image from table3 where studnum='" + textBox1.Text + "'";
cmd = new SqlCommand(sqlQuery, conection);
SqlDataReader dataread = cmd.ExecuteReader();
dataread.Read();
if (dataread.HasRows)
{
lblstudnum.Text = dataread[0].ToString();
lblcourse.Text = dataread[1].ToString();
lblfname.Text = dataread[2].ToString();
lbllname.Text = dataread[3].ToString();
byte[] images = (byte[])dataread[4];
if(images==null)
{
pictureBox1.Image = null;
}
else
{
MemoryStream mstreem = new MemoryStream(images);
pictureBox1.Image = Image.FromStream(mstreem);
}
}
else
{
MessageBox.Show("this data not available");
}
}
错误行是
pictureBox1.Image = Image.FromStream(mstreem);
答案 0 :(得分:1)
最好使用参数查询和列名而不是使用[0],[1]等。数据读取器使用内存流。所以你应该使用如下,提供有效的图像保存在数据库强>
var con = new SqlConnection("the connection string to database");
con.Open();
SqlCommand cmd = new SqlCommand(@"sql query",con);
byte[] images = null;
using (SqlDataReader dataread = cmd.ExecuteReader())
{
if (dataread.Read())
{
//lblstudnum.Text = dataread[0].ToString();
//lblcourse.Text = dataread[1].ToString();
//lblfname.Text = dataread[2].ToString();
//lbllname.Text = dataread[3].ToString();
images = (byte[])dataread["color_image"];// column name is recommended
}
}
con.Close();
if (images == null)
{
pictureBox1.Image = null;
}
else
{
MemoryStream mstreem = new MemoryStream(images);
pictureBox1.Image = Image.FromStream(mstreem);
}
答案 1 :(得分:0)
可能不是有效的图片。在程序中添加一些调试代码(或设置watch),它将输出内存流的长度及其前几个字节。确保长度符合您的预期。确保文件前缀在那里,如果有,例如位图文件有two-letter alphanumeric prefix。确保它没有被截断。确保它是allowed file format。问题可能在于教师的数据库中包含数据,而您的数据库则没有。