我在将数据插入数据库时遇到错误。
错误是:
“查询值和目标字段的数量不相同”。
插入代码:
OleDbConnection vconn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Mutyyba\\Documents\\Database1.accdb");
vconn.Open();
string name = textBox1.Text;
string address = textBox3.Text;
int rollno = Convert.ToInt32(textBox2.Text);
string vquery = "insert into Table1 values(@vname,@vrollno,@vaddress)";
OleDbCommand vcomm = new OleDbCommand(vquery, vconn);
vcomm.Parameters.AddWithValue("@vname", name);
vcomm.Parameters.AddWithValue("@vrollno", rollno);
vcomm.Parameters.AddWithValue("@vaddress", address);
vcomm.ExecuteNonQuery();
MessageBox.Show("your record has been recorded sucessfully!");
vconn.Close();
我做错了什么?
答案 0 :(得分:4)
我认为你错过了一些单引号。我看到你已经用起始和结束单引号括起了所有参数。见this
还有一件事,因为你传递了很多参数,为参数准备一个 SqlCommand对象。 有关详细信息,请参阅msdn。
做这样的事情:
SqlCommand comm = new SqlCommand("INSERT INTO table VALUES (@txtsno, @txtdesg, @txtbasic)", connection);
comm.Parameters.AddWithValue("@txtsno", txtsno.Text.Trim());
comm.Parameters.AddWithValue("@txtsno", txtdesg.Text.Trim());
comm.Parameters.AddWithValue("@txtsno", txtbasic.Text.Trim());
这会更加清晰,不会出现SQL Injection.
答案 1 :(得分:3)
尝试使用参数来构建命令
// Create the InsertCommand.
command = new OleDbCommand(
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (?, ?)", connection);
// add parameters like below
command.Parameters.Add(
"CustomerID", OleDbType.Char, 5, "CustomerID");
command.Parameters.Add(
"CompanyName", OleDbType.VarChar, 40, "CompanyName");
答案 2 :(得分:1)
您需要在SQL中指定列名,或者值序列应与表的默认架构完全相同(数字和顺序)
OleDbCommand cmd = new OleDbCommand("insert into real (name, symbol, date, red, redby, redsell, sbintrabuy, sbtr1, sbtr2, sbtr3, sbintersell, sbtr1, sbtr2, sbtr3, rstl, green) values('" + Name + "','" + Symbol + "','" + Date + "','" + Red + "','" + RedBuy + "','" + RedSell + "','" + SBIntraBuy + "','" + SBTR1 + "','" + SBTR2 + "','" + SBTR3 + "','" + SBIntraSell + "','" + SBTR1 + "','" + SBTR2 + "','" + SBTR3 + "','" + RSTL + "','" + Green + "');", con);
用正确的名称替换粗体列,建议明确指定列名。
字符串值应该是单个配额
通常,您应该编写如下的sql:
cmd.Parameters.Add(“var”,System.Data.OleDb.OleDbType.VarChar); cmd.Parameters [“var”]。Value ='somevalue';
在你的sql中应该像:“插入实数(column1)值(@var)”。
====
我更新了上面的答案,希望它能解决你的问题。
答案 3 :(得分:-3)
insert into Main values (28494,1,False,'Buto-asma Sirop' , 'Buto-asma Sirop', 3.99 , 'Syrup', 'ispani', ' ', ' ',0, '1',4988 )
解决了这个问题