2013-09-25 46 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