2010-04-07 149 views
4

我的代碼如下。我有一個方法,我傳入三個參數,並將它們寫出到MS Access數據庫表中。但是,我不斷收到語法錯誤消息。誰能告訴我爲什麼?我從互聯網上得到了這個例子。「INSERT INTO語句中的語法錯誤」。爲什麼?

 private static void insertRecord(string day, int hour, int loadKW) 
    { 
     string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\LoadForecastDB.accdb"; 
     OleDbConnection conn = new OleDbConnection(connString); 

     string ins = @"INSERT INTO Forecasts (Day, Hour, Load) VALUES (?,?,?)"; 

     OleDbCommand cmd = new OleDbCommand(ins, conn); 

     cmd.Parameters.Add("@day", OleDbType.VarChar).Value = day; 
     cmd.Parameters.Add("@hour", OleDbType.Integer).Value = hour; 
     cmd.Parameters.Add("@load", OleDbType.Integer).Value = loadKW; 

     conn.Open(); 

     try 
     { 
      int count = cmd.ExecuteNonQuery(); 
     } 
     catch (OleDbException ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 
+0

在編譯時或執行時是否得到語法錯誤?你能提供關於錯誤的更多信息嗎? – 2010-04-07 10:31:24

+0

我在執行時遇到錯誤。謝謝! – Kevin 2010-04-07 10:33:17

回答

7

我想這可能是因爲您的列名(日和時)也是關鍵字。也許你可以把`(倒單引號)周圍(即在MySQL的作品,不知道的MS Access)

+0

嗯。日和小時是關鍵字,呃?這可能是我的問題的根源。我將更改文件中的字段名稱,並將我的'插入'改爲'看看會發生什麼。謝謝! – Kevin 2010-04-07 10:34:50

+0

我對此有第二個想法,可能是他們不是關鍵字,但這是我能想到的第一件事。值得嘗試查明,讓我知道發生了什麼。 – 2010-04-07 10:36:00

+0

你是對的!我在文件和程序中將Day and Hour更改爲ForecastDay和ForecastHour,然後重新運行該程序。它非常完美!好眼睛!非常感謝! – Kevin 2010-04-07 10:39:29

2

嘗試改變

string ins = @"INSERT INTO Forecasts (Day, Hour, Load) VALUES (?,?,?)"; 

要:

string ins = @"INSERT INTO Forecasts ([Day], [Hour], [Load]) VALUES (@day, @hour, @load)"; 
+1

我認爲OLE DB參數需要'?',而不是@-前綴名。 – wRAR 2010-04-07 10:34:22

+0

好主意!我現在會改變它,看看會發生什麼。謝謝! – Kevin 2010-04-07 10:35:09

+0

是的,我確實在某處讀過OLE DB parms需要的地方?而不是'命名'parms。但是,我會在這一點上嘗試任何事情。 – Kevin 2010-04-07 10:35:50

0

另一種選擇可能是指綁定變量與數字:

cmd.Parameters.Add(1, OleDbType.VarChar).Value = day; 
    cmd.Parameters.Add(2, OleDbType.Integer).Value = hour; 
    cmd.Parameters.Add(3, OleDbType.Integer).Value = loadKW; 

注意我不知道C#,但類似的方法適用於Java和JDBC。

+0

謝謝,Juha,我會看看這是否有所作爲。 – Kevin 2010-04-07 10:34:00

相關問題