2013-09-25 134 views
2

我敢肯定我正在做一些愚蠢的事情,但我似乎找出了這個插入查詢的問題。我有一些SQL Server的經驗,但不幸的是我不得不爲這個項目使用Access(這是我的新手)。在這一點上,我嘗試手動插入到Access(工作),然後將確切的查詢複製到Visual Studio,我仍然得到一個插入語法錯誤。我可以在這個相同的測試程序中插入到其他表中,但我無法使這個查詢工作。微軟訪問SQL插入查詢

我試圖插入到被設置爲下表:

ID - Int Primary Key 
time_series_id Int 
open decimal 
high decimal 
low decimal 
close decimal 
volume int 
observation_date Date/Time 

我試圖手動查詢:

queryString = "INSERT INTO daily_prices (time_series_id, open, high, low, close, volume, observation_date) VALUES(13, 3036.75, 3045.72, 3023.27, 3027.52, 4894428992, '2013-09-24')"; 

command = new OleDbCommand(queryString, conn); 
command.ExecuteNonQuery(); 

查詢最初也曾制定以下方式:

queryString = String.Format(@"INSERT INTO daily_prices (time_series_id, open, high, low, close, volume, observation_date) VALUES ({0}, {1} ,{2} ,{3} ,{4} ,{5} ,'{6}')", newId, open, high, low, close, volume, date); 

任何幫助將不勝感激在這裏。我確信這是一個愚蠢的錯誤,但是由於我能夠在訪問中執行查詢,並且在C#中相同的查詢失敗,所以我有點不知所措。

+0

什麼是錯誤? –

+0

插入語法錯誤,這就是爲什麼我在錯誤的地方看了這麼長時間的想法。我檢查了Access保留字,但沒有檢查SQL保留字。 –

回答

1

OPEN和CLOSE這個詞是Jet-SQL(Jet 4.0)的保留關鍵字。使用方括號(如果可能,更改列名稱)

queryString = "INSERT INTO daily_prices (time_series_id, [open], high, low, " + 
       "[close], volume, observation_date) VALUES " + 
       "(13, 3036.75, 3045.72, 3023.27, 3027.52, 4894428992, '2013-09-24')"; 
+0

在發佈之前,我查了一下保留字,但一定是看錯了列表。我知道這將是愚蠢的。謝謝史蒂夫。 –

+0

這是[JET 4.0](http://support.microsoft.com/kb/321266)的列表,請注意這些單詞是如何保留爲[ACE](http://office.microsoft.com/zh-cn/ us/access-help/access-2007-reserved-words-and-symbols-HA010030643.aspx),但你需要向下滾動才能看到它們。對我來說,這只是MS方面的不好的衝擊 – Steve