2017-12-07 4 views
0

私はC#アプリケーションでデータを挿入しようとしている2つのテーブルがあります。彼らはIDと関連していました。関連するデータベースにデータを挿入する。 C#

私はこれを行う方法について少し質問を読んだことがありますが、それらのどれもうまくいきませんでした。今は別のSQLクエリとして実行することに決めました。

private void btnSave_Click(object sender, EventArgs e) 
     { 
      //table 1 
      String acctCode = tbAcctCode.Text; 
      String address1 = tbAdd1.Text; 
      String address2 = tbAdd2.Text; 
      String address3 = tbAdd3.Text; 
      String balance = tbBalance.Text; 
      String yearSales = tbSales.Text; 
      String yearCost = tbCost.Text; 
      //table 2 
      String date = tbDate.Text; 
      String transaction = tbTrans.Text; 
      String docNum = tbDocNum.Text; 
      String grossVal = tbGross.Text; 
      String vatVal = tbVat.Text; 

      //SQL statement set to Add a new value 
      sql = String.Format("INSERT INTO "+ table1 + "(Account_Code,Address1,Address2,Address3,Balance,Sales_Year_To_Date,Cost_Year_To_Date) " + 
           "VALUES " + 
           "('{0}'," + "{1}," + "{2}," + "'{3}'," + "'{4}'," + "{5}," + "'{6}');", acctCode, address1, address2, address3, balance, yearSales, yearCost); 

      sql2 = String.Format("INSERT INTO " + table2 + "(Date,Transaction_Type,Document_No,Gross_Transaction_Value,Vat_Value) " + 
           "VALUES " + 
           "('{0}'," + "'{1}'," + "'{2}'," + "'{3}'," + "'{4}');", date, transaction, docNum, grossVal, vatVal); 

      try 
      { 
       dbConn = new OleDbConnection(conString); 
       dbCmd = new OleDbCommand(sql, dbConn); 

       dbConn.Open(); 
       dbCmd.ExecuteNonQuery(); 
       dbCmd = new OleDbCommand(sql2, dbConn); 
       dbCmd.ExecuteNonQuery(); 
      } 
      catch (SqlException E) 
      { 
       MessageBox.Show(E.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      finally 
      { 
       dbConn.Close(); 
      } 

     } 
    } 

データは最初のテーブルに挿入されますが、問題はsql2のOleDbCommandで発生します。 "System.Data.OleDb.OleDbExceptionがスローされます: 'INSERT INTO文に構文エラーがあります。'"

SQL構文で何かが間違っていると感じましたが、私はそれを見つけられません。

+4

は_「私は私のSQL構文で感じ、何かが間違っているが、私はそれを見つけることができないんだ。」_はい、あなたは 'sql2'の値が何であるか、SQLパラメータ;-) –

+0

を使用してはいけません実行前? – SmartDev

+0

これは実行前のsql2です。 ( '2017/12/06'、 'EFT'、 '6'、 '150'、 '50'); "を入力してください。 – Demonic218

答えて

1
Try This Would Be Prefect 

private void btnSave_Click(object sender, EventArgs e) 
{ 
    //SQL statement set to Add a new value 
     sql = String.Format("INSERT INTO " + table1 + "(Account_Code,Address1,Address2,Address3,Balance,Sales_Year_To_Date,Cost_Year_To_Date) " + 
          "VALUES " + (@acctCode, @address1, @address2, @address3, @balance, @yearSales, @yearCost)); 

     sql2 = String.Format("INSERT INTO " + table2 + "([Date],Transaction_Type,Document_No,Gross_Transaction_Value,Vat_Value)" + 
          "VALUES " + (@date, @transaction, @docNum, @grossVal, @vatVal)); 


     try 
     { 
      dbConn = new OleDbConnection(conString); 
      cmd = new OleDbCommand(sql, dbConn); 

      //table 1 
      cmd.Parameters.AddWithValue("@acctCode", tbAcctCode.Text); 
      cmd.Parameters.AddWithValue("@address1", tbAdd1.Text); 
      cmd.Parameters.AddWithValue("@address2", tbAdd2.Text); 
      cmd.Parameters.AddWithValue("@address3", tbAdd3.Text); 
      cmd.Parameters.AddWithValue("@balance", tbBalance.Text); 
      cmd.Parameters.AddWithValue("@yearSales", tbSales.Text); 
      cmd.Parameters.AddWithValue("@yearCost", tbCost.Text); 

      dbConn.Open(); 
      cmd.ExecuteNonQuery(); 
      cmd = new OleDbCommand(sql2, dbConn); 

      //table 2 
      cmd.Parameters.AddWithValue("@date", tbDate.Text); 
      cmd.Parameters.AddWithValue("@transaction", tbTrans.Text); 
      cmd.Parameters.AddWithValue("@docNum", tbDocNum.Text); 
      cmd.Parameters.AddWithValue("@grossVal", tbGross.Text); 
      cmd.Parameters.AddWithValue("@vatVal", tbVat.Text); 

      cmd.ExecuteNonQuery(); 
     } 
     catch (SqlException E) 
     { 
      MessageBox.Show(E.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally 
     { 
      dbConn.Close(); 
     } 
    } 
+0

を使用すると、 "dbCmd.CommandText = sql2;" – Rob

+1

と、2番目の表の "Date"というフィールド名が問題であるかどうかを確認しましたか? – Rob

+0

これは、最初のパラメータ "System.NullReferenceException: 'オブジェクト参照がオブジェクトのインスタンスに設定されていません。 cmdがnullだった " – Demonic218

関連する問題