2016-05-18 9 views
0

データベースにコンボボックスの値を入力できないため、挿入クエリに複数の値を含めることはできず、cmd.ExecuteNonQueryでエラーが発生します。この問題を解決するために私を助けてください。イムは、C#でちょうど新人MSDN - OleDbCommand.CommandText PropertyからC#を使用してコンボボックスの値をAccessに挿入する方法

2 text box and 2 combo box 2 combo box values

private void Button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
      OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:/Films/Database/Films/FilmDB/FilmsDB.accdb"); 
      OleDbCommand cmd = new OleDbCommand(); 
      cmd.Connection = conn; 
      cmd.CommandText = "INSERT INTO Films(DVD_No,Films_1,Category_1,SubCategory_1)VALUES(@no,@f1,@cat1,@scat1)"; 

      cmd.Parameters.AddWithValue("no", TextBox1.Text); 

      cmd.Parameters.AddWithValue("f1", TextBox2.Text); 
      cmd.Parameters.AddWithValue("cat1", ComboBox1.GetItemText(ComboBox1.SelectedItem)); 
      cmd.Parameters.AddWithValue("scat1", ComboBox2.GetItemText(ComboBox1.SelectedItem)); 

      //open con 
      conn.Open(); 
      //exec cmd 
      int row = cmd.ExecuteNonQuery(); 
      if (row == 1) 
      { 
       MessageBox.Show("Data Stored in the Database"); 
      } 
      else 
      { 
       MessageBox.Show("Error"); 
      } 
      //close con 
      conn.Close(); 
    } 
    catch (Exception c) 
    { 
     MessageBox.Show("Record failed" + c.Message); 
    } 
} 

答えて

0

OLE DB.NETプロバイダーSQLステートメントまたはと呼ばれるストアドプロシージャにパラメータを渡すための名前付きパラメータをサポートしていません。 CommandTypeがTextに設定されている場合は、OleDbCommandを使用します。この場合、疑問符(?)のプレースホルダを使用する必要があります。次に例を示します。 SELECT * From Customers Where CustomerID =? したがって、OleDbParameterオブジェクトがOleDbParameterCollectionに追加される順序は、パラメータの疑問符プレースホルダの位置に直接対応する必要があります。

次であなたのCommandTextを置き換えます

cmd.CommandText = "INSERT INTO Films(DVD_No,Films_1,Category_1,SubCategory_1)VALUES(?,?,?,?)"; 

をあなたは既に適切な順序でパラメータを追加しました。がんばろう!

+0

非常に助けを感謝します。私はあなたが言ったことを使用したが、エラーはコンボボックスから来る。 –

関連する問題