c#参数是无效的SQL

本文关键字:SQL 无效 参数 | 更新日期: 2023-09-27 18:11:28

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

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

请帮

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

c#参数是无效的SQL

最好使用参数查询和列名,而不是使用[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);
    }

可能不是有效的图像。在程序中添加一些调试代码(或设置一个手表),它将输出内存流的长度及其前几个字节。确保长度符合你的预期。确保文件前缀在那里,如果有的话,例如位图文件有两个字母的字母数字前缀。确保它没有被截断。确保它是一种允许的文件格式。问题可能是你的教练的数据库中有数据,而你的没有。