C#参数无效SQL

时间:2016-10-04 08:07:31

标签: c# sql-server

我有从我观看的教程中复制的代码,我们的代码在教程中非常相似。

当演示者运行代码时,它运行正常,但是当我尝试运行与教程中相同的代码时,我收到错误“参数无效”。

请帮忙

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

2 个答案:

答案 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。问题可能在于教师的数据库中包含数据,而您的数据库则没有。