如何让此查询生效?不断收到此错误:
" INSERT INTO语句中的语法错误"
我很困惑,因为它曾经在另一个程序上工作,但我全都搞砸了这个。
string item = listView1.Items[listView1.FocusedItem.Index].Text;
MessageBox.Show(item); //test Value
string thisDay1 = DateTime.Now.ToString();
ad.InsertCommand = new OleDbCommand("INSERT INTO Scrap-Rework Master Data (Is_today, S_Line, Status, T_Number, Test_Cp, think_a, Rew_Hos, QAffect, Comments)
values (?, ?, ?, ?, ?, ?, ?, ?, ?)", con);
ad.InsertCommand.Parameters.AddWithValue("@S_Line", OleDbType.VarChar).Value = textBox1.Text;
ad.InsertCommand.Parameters.AddWithValue("@Status", OleDbType.VarChar).Value = domainUpDown1.Text;
ad.InsertCommand.Parameters.AddWithValue("@T_Number", OleDbType.VarChar).Value = textBox2.Text;
ad.InsertCommand.Parameters.AddWithValue("@Test_Cp", OleDbType.VarChar).Value = item;
ad.InsertCommand.Parameters.AddWithValue("@think_a", OleDbType.VarChar).Value = domainUpDown2.Text;
ad.InsertCommand.Parameters.AddWithValue("@Rew_Hos", OleDbType.Numeric).Value = Double.Parse(textBox4.Text);
ad.InsertCommand.Parameters.AddWithValue("@QAffect", OleDbType.Numeric).Value = int.Parse(textBox3.Text);
ad.InsertCommand.Parameters.AddWithValue("@Comments", OleDbType.VarChar).Value = textBox5.Text;
ad.InsertCommand.Parameters.AddWithValue("@Is_today", OleDbType.DBTime).Value = thisDay1;
Listview有两列:
ListViewItem listitem = new ListViewItem(dr["Test_Cp"].ToString());
listitem.SubItems.Add(dr["Description"].ToString());
访问数据库和类型字段:
S_Line -Short Text;
Status -Short Text;
T_Number -Short Text;
Test_Cp -Short Text;
think_a -Short Text;
Rew_Hos -Number;
QAffect -Number;
Comments -Long Text;
Is_today -Date/Time;
提前非常感谢你。
答案 0 :(得分:1)
首先,您必须始终使用方括号[]作为查询中包含空格的名称,例如[Scrap-Rework Master Data]
。
2-声明OleDbCommand
参数。
3-按顺序将Parameters
的名称放入查询中。
4-格式DateTime
字段。
为插入数据添加cmd.ExecuteNonQuery();
。
string item = listView1.Items[listView1.FocusedItem.Index].Text;
MessageBox.Show(item); //test Value
OleDbCommand cmd = new OleDbCommand("INSERT INTO [Scrap-Rework Master Data] (S_Line, Status, T_Number, Test_Cp, think_a, Rew_Hos, QAffect, Comments, Is_today)" +
"values(@S_Line, @Status, @T_Number, @Test_Cp, @think_a, @Rew_Hos, @QAffect, @Comments, @Is_today)", con);
cmd.Parameters.AddWithValue("@S_Line", textBox1.Text);
cmd.Parameters.AddWithValue("@Status", domainUpDown1.Text);
cmd.Parameters.AddWithValue("@T_Number", textBox2.Text);
cmd.Parameters.AddWithValue("@Test_Cp", item) ;
cmd.Parameters.AddWithValue("@think_a", domainUpDown2.Text);
cmd.Parameters.AddWithValue("@Rew_Hos", Double.Parse(textBox4.Text)) ;
cmd.Parameters.AddWithValue("@QAffect", int.Parse(textBox3.Text)) ;
cmd.Parameters.AddWithValue("@Comments", textBox5.Text) ;
cmd.Parameters.AddWithValue("@Is_today", DateTime.Now.ToString("#yyyy/MM/dd#"));
cmd.ExecuteNonQuery();
答案 1 :(得分:1)
您正在使用OleDB,因此can't use named parameters:
System.Data.OleDb 使用由问号(?)表示的位置参数标记。
表示(来自同一页面)
因此,Parameter对象添加到Parameters集合的顺序必须直接对应于?的位置?参数的占位符。
问题是您的订单错误:INSERT中的第一个值是Is_Today,但这是您添加到参数数组的最后一个值。因此所有的价值类型都是错误的。尝试移动
ad.InsertCommand.Parameters.AddWithValue("@Is_today", OleDbType.DBTime).Value = thisDay1;
到参数添加列表的头部。
此外,我同意abrown's comment:您可能需要将表名[Scrap-Rework Master Data]
括起来,因为它有空格和短划线。
答案 2 :(得分:0)
尝试在DB中使用存储过程:
using (var command1 = new SqlCommand("InsertData", conn)
{
CommandType = CommandType.StoredProcedure
})
{
command1.Parameters.Add("@a1", SqlDbType.Text).Value = A1;
command1.Parameters.Add("@a2", SqlDbType.Text).Value = A2;
command1.Parameters.Add("@a3", SqlDbType.Text).Value = A3;
command1.Parameters.Add("@a4", SqlDbType.Text).Value = A4;
command1.ExecuteNonQuery();
}