【发布时间】:2017-11-27 22:49:54
【问题描述】:
我收到此错误:
INSERT语句中的列多于VALUES子句中指定的值。VALUES子句中的值数必须与INSERT语句中指定的列数匹配。'
这是我的代码:
if (pictureBox1.Image != null)
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] a = ms.GetBuffer();
ms.Close();
MemoryStream ms1 = new MemoryStream();
pictureBox2.Image.Save(ms1, pictureBox2.Image.RawFormat);
byte[] a2 = ms1.GetBuffer();
ms1.Close();
MemoryStream ms2 = new MemoryStream();
pictureBox3.Image.Save(ms2, pictureBox3.Image.RawFormat);
byte[] a3 = ms2.GetBuffer();
ms2.Close();
MemoryStream ms3 = new MemoryStream();
pictureBox4.Image.Save(ms3, pictureBox4.Image.RawFormat);
byte[] a4 = ms3.GetBuffer();
ms3.Close();
cmd.Parameters.Clear();
// cmd1.Parameters.Clear();
cmd.Connection = con;
cmd1.Connection = con;
cmd.Parameters.AddWithValue("@img1", a);
cmd.Parameters.AddWithValue("@img2", a2);
cmd.Parameters.AddWithValue("@img3", a3);
cmd.Parameters.AddWithValue("@img4", a4);
cmd1.CommandText = "Insert into proiecte(numeproiect,judet,oras,strada,numaretajeimobil,clasaenergetica,parcare,mezanin,demisol,mansarda,descriereproiect)values('"
+ nameofproject.Text + "','" + district_text.Text + "','" + city_text.Text + "','" + street_text.Text + "','" + bunifuDropdown2.selectedValue + "','" + bunifuMaterialTextbox1.Text + "','" + bunifuDropdown1.selectedValue + "','" + mezanine + "','" + semibasement + "','" + mansard + richTextBox1.Text + "')";
cmd.CommandText = "insert into proiecte(img1,img2,img3,img4)values(@img1,@img2,@img3,@img4)";
con.Open();
cmd1.ExecuteNonQuery();
cmd.ExecuteNonQuery();
con.Close();
}
【问题讨论】:
-
这个错误信息有什么令人困惑的地方吗?
-
您的代码易受 SQL 注入攻击。
-
我想指出你的
cmd1受到SQL Injection 攻击,你真的应该考虑修复它。有趣的是,您显然知道如何使用参数化查询,因为您在cmd中这样做 - 一定要对cmd1做同样的事情! -
就像我写的一样:
insert into sometable(column1) values(1,2,3,4,5)。 sql server 说:来吧,伙计!你要我插入 1 或 2 或 3 或 4 或 5 吗?您需要确保列数与您给我的值数相同。不要给我 5 个值并要求我将它们插入 1 列。聪明的老兄! -
您应该查看您的代码生成的 SQL 语句,以确保它是可执行的。这样做之后,我相信找到错误会非常简单。
标签: c# sql sql-server