我需要将表单数据从我的VB.NET应用程序插入Microsoft Access数据库。
使用以下语法时收到错误"Syntax error in INSERT INTO statement"
:
INSERT INTO bs1 (teacher, subject, date, period)
VALUES ('test', 'test', 'test', 'test')
我承认我已经习惯了MySQL类型的语法,对此问题的任何帮助都将不胜感激,谢谢。
答案 0 :(得分:11)
我相信date
是一个保留字。您需要将保留字段名称封装在方括号中:
INSERT INTO bs1 (teacher, subject, [date], period) VALUES ('test', 'test', 'test', 'test')
编辑:有关Access 2002及更高版本中保留字的完整列表,请参阅以下文章: http://support.microsoft.com/kb/286335
〜的md5sum〜
答案 1 :(得分:5)
在Access中,插入日期字段的文字值的分隔符为#
,文本字段为'
或"
,数字字段值没有分隔符,表示:< / p>
INSERT INTO bs1 (teacher, subject, [date], period)
VALUES ('test', 'test', #2009-12-31#, 0)
答案 2 :(得分:3)
在Access数据库引擎SQL代码中,当您需要指定文字值类型为DATETIME
时,您可以将值显式转换为DATETIME
或使用#
个字符划定价值。
使用CDATE()
函数进行显式强制转换:
INSERT INTO bs1 (teacher, subject, [date], period)
VALUES ('test', 'test', CDATE('2009-12-31 00:00:00'), 0);
使用DATETIME
字面值:
INSERT INTO bs1 (teacher, subject, [date], period)
VALUES ('test', 'test', #2009-12-31 00:00:00#), 0);
当{{1}将值放入INSERT
类型的列中时,如果未指定显式DATETIME
值,则引擎将隐式尝试将值强制转换为{{1} }}。文字值'test'无法强制键入DATETIME
,这似乎是语法错误的来源。
注意:以上都不适用于DATETIME
值。在Access Database Engine SQL中,无法将DATETIME
值转换为显式类型,例如
NULL
生成错误“无效使用NULL”。因此,要指定NULL
SELECT CDATE(NULL)
字面值,只需使用NULL
关键字。
值得注意的是,Access数据库引擎只有一种时态数据类型,DATETIME
(其同义词为NULL
,DATETIME
,DATE
和{{ 1}})。即使您没有明确指定时间元素,结果值仍将具有时间元素,尽管是隐式元素。因此,最好始终明确,并且在使用TIME
文字值时始终包含时间元素。