2013-03-20 76 views
0

我有一個Access數據庫與表(DV1)有[ID時代碼原因]列。我只是想更新表格。我不斷收到INSERT INTO sytax錯誤。我看到的一切都很好。我已經嘗試了一切。 我打開數據庫,然後出現錯誤。有什麼想法嗎?使用INSERT INTO添加到Access數據庫?

private void WRTODB_Click(object sender, EventArgs e) 
    { 
     OleDbConnection machStopDB = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="[email protected]"C:\Users\sgarner\Google Drive\Visual Studio 2012\Timer test\WRITE TO DB\WRITE TO DB\Machine_Stop.accdb"); 
     machStopDB.Open(); 
     string str = "INSERT INTO DV1(TIME,CODE,REASON)" + 
      "VALUES(('" + DateTime.Now + "'),('" + textBox1.Text + "'),('" + textBox2.Text + "'))"; 
     OleDbCommand insertCmd = new OleDbCommand(str, machStopDB); 
     insertCmd.ExecuteNonQuery(); 
     machStopDB.Close(); 
    } 

這只是一個我正在使用的測試程序。

+3

嘗試使用參數http://msdn.microsoft.com/en-GB/library/system.data.oledb.oledbcommand。 parameters.aspx,使您的代碼更具可讀性 – Yahya 2013-03-20 16:17:08

+0

@Yahya,也許更重要的是,不太容易受到SQL注入的影響 – GolfWolf 2013-03-20 16:18:04

+0

我可能是錯的,但是爲什麼每個值都有括號?我認爲單引號應該夠了。 – Yahya 2013-03-20 16:18:07

回答

1

下面的代碼包含由上述評論所提供的聲音的想法:

private void WRTODB_Click(object sender, EventArgs e)   
{ 
    try 
    { 
     using (SqlConnection dbConnection = new SqlConnection()) 
     { 
      string Source = @"C:\Users\sgarner\Google Drive\Visual Studio 2012\Timer test\WRITE TO DB\WRITE TO DB\Machine_Stop.accdb"; 
      dbConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Source; 
      dbConnection.Open(); 
      using (SqlCommand command = new SqlCommand("INSERT INTO DV1([TIME],CODE,REASON) VALUES ([pTime],[pCode],[pReason])", dbConnection)) 
      { 
       command.Parameters.AddWithValue("pTime", DateTime.Now); 
       command.Parameters.AddWithValue("pCode", textBox1.Text); 
       command.Parameters.AddWithValue("pReason", textBox2.Text); 
       command.ExecuteNonQuery(); 
      } 
      dbConnection.Close(); 
     } 
    } 
    catch (Exception ex) 
    { 
     throw new Exception(ex.Message); 
    } 
} 
+0

時間是[保留字](http://support.microsoft.com/kb/321266),您需要將其轉義。爲什麼在MS Access有Now()時插入ptime? – Fionnuala 2013-03-20 16:51:12

+0

Thanks @Remou - 我忽略了TIME - 將編輯帖子。我不清楚你的意思是MS-Access具有Now()嗎?你的意思是Field定義應該包含默認情況下,指定Now()? - 我同意這一點。 – 2013-03-20 17:15:30

+0

+1是的,但不僅如此,這確實很好,你現在可以簡單地使用SQL字符串'VALUES(Now(),[pCode], '它可以節省很多痛苦 – Fionnuala 2013-03-20 17:17:09