2016-05-19 127 views
0

如何获得此查询的工作?不断收到此错误:如何解决此查询错误

"syntax error in INSERT INTO statement"

我,因为它曾经在另一个程序中工作困惑,但我得到了所有炒了这一个。

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; 

列表视图有2列:在访问数据库和类型

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; 

非常感谢你提前。

+2

你插入的表的名称是什么?如果它的“废料返工主数据”包含空格,则需要在方括号中限定名称,例如插入[Scrap-Rework Master Data] – abrown

+0

您的SQL参数('?')未被命名。如果OleDbCommand支持这一点,并且假定它们使用您的参数顺序进行组装,那么它将无法工作,因为IsToday是无序的。 – Rup

+0

OleDB忽略参数名称,所以您的参数必须按索引顺序排列。这意味着你的'@ Is_today'参数必须先被添加,因为这是查询表达式中的第一个'?'。 – LarsTech

回答

1

首先,你必须用括号[]总是包含在像[Scrap-Rework Master Data]查询空间的名称。

2-声明OleDbCommand参数。

3-将Parameters的名称按照顺序查询。

4-格式DateTime字段。

5-为插入数据添加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(); 
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(); 
} 
1

您使用的OLEDB,所以你can't use named parameters

System.Data.OleDb Uses positional parameter markers indicated by a question mark (?).

这意味着(来自同一页)

​​

问题是,您的订单是错误的:在第一个值你的INSERT是Is_Today,但这是你添加到参数数组的最后一个值。因此所有的值类型都是错误的。尝试移动

ad.InsertCommand.Parameters.AddWithValue("@Is_today", OleDbType.DBTime).Value = thisDay1; 

到您的参数添加列表的头部。

另外我同意abrown's comment:你可能需要将表名[Scrap-Rework Master Data]括起来,因为它有空格和破折号。