2016-05-19 5 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のパラメータ( '?' s)に名前は付けられていません。 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]にスペースとダッシュが含まれているため、表名をかっこする必要があります。

関連する問題