最近在做Access的一个项目,总是莫名其妙的提示:“Insert Into 语法错误”,这样的信息总给人带来很多麻烦,有时候为了这样一个错误要找好久才能解决问题,"Insert Into 语法错误"这个提示本身包含的信息量很少,在跟踪堆栈中有找不到更详细的信息,为了避免大家在开发的过程中遇到同样的错误和困扰。通过查找和摸索把有可能出现这种错误的可能总结一下和大家一起分享。

1.关键字:如果你的数据库的表的设计包含了Access包含的关键字,则在插入的时候会出现“Insert Into 语法错误”

例如:

string sqlText = String.Format("Insert into TestTable(Id,Order) values ({0},{1})",123,0);

这行上面这条语句是失败的,原因是TestTable表中有一个关键字"Order",解决办法:

(1).将语句中的关键字用[order]处理就可以了。如:

string sqlText = String.Format("Insert into TestTable(TestId,[Order]) values ({0},{1})",123,0);

(2).将所有的字段都用[]括起来,这在许多代码生成器中都采用这种方式来解决关键字的冲突问题。如:

string sqlText = String.Format("Insert into TestTable([Id],[Order]) values ({0},{1})",123,0);

(3).在设计数据库的时候尽量避免使用Access本身的保留字。这样就不会出现应为关键字问题引起的错误了,这也是最佳的解决方法。

2.文本类型:字符类型引起的“Insert Into 语法错误”,通常是因为数据库设计的时候字段是字符型的,结果在Insert into 的时候字段值没有加''引起的。

例如:

string sqlText = String.Format("Insert into TestTable(TestId,TestName) values ({0},{1})",123,”cnblogs");

说明:

Test 是数字型字段,TestName 是文本型字段

上面的操作会出现:“Insert Into 语法错误”

解决方法:在操作的时候给 Name字段的值加上''可解决问题,如:

string sqlText = String.Format("Insert into TestTable(TestId,TestName) values ({0},‘{1}’)",123,”cnblogs");

3.备注类型:备注类型的字段和文本字段一样,碰到问题,可以用同样的方法解决

4.日期/时间类型:日期/时间类型的字段和文本字段一样,碰到问题可以用同样的解决方法

Access 数据库的关键字:

-A
    ADD
    ALL
    Alphanumeric
    ALTER
    AND
    ANY
    Application
    AS
    ASC
    Assistant
    AUTOINCREMENT
    Avg
-B
    BETWEEN
    BINARY
    BIT
    BOOLEAN
    BY
    BYTE
-C
    CHAR, CHARACTER
    COLUMN
    CompactDatabase
    CONSTRAINT
    Container
    Count
    COUNTER
    CREATE
    CreateDatabase
    CreateField
    CreateGroup
    CreateIndex
    Createobject
    CreateProperty
    CreateRelation
    CreateTableDef
    CreateUser
    CreateWorkspace
    CURRENCY
    CurrentUser
-D
    DATABASE
    DATE
    DATETIME
    delete
    DESC
    Description
    DISALLOW
    DISTINCT
    DISTINCTROW
    Document
    DOUBLE
    drop
-E
    Echo
    Else
    End
    Eqv
    Error
    EXISTS
    Exit
-F
    FALSE
    Field, Fields
    FillCache
    FLOAT, FLOAT4, FLOAT8
    FOREIGN
    Form, Forms
    FROM
    Full
    FUNCTION
-G
    GENERAL
    Getobject
    GetOption
    GotoPage
    GROUP
    GROUP BY
    GUID
-H
    HAVING
-I
    Idle
    IEEEDOUBLE, IEEESINGLE
    If
    IGNORE
    Imp
    IN
    INDEX
    Index, Indexes
    INNER
    INSERT
    InsertText
    INT, INTEGER, INTEGER1, INTEGER2, INTEGER4
    INTO
    IS
-J
    JOIN
-K
    KEY
-L
    LastModified
    LEFT
    Level
    Like
    LOGICAL, LOGICAL1
    LONG, LONGBINARY, LONGTEXT
                
-M
    Macro
    Match
    Max, Min, Mod
    MEMO
    Module
    MONEY
    Move
-N
    NAME
    NewPassword
    NO
    Not
    Note
    NULL
    NUMBER, NUMERIC
-O
    object
    OLEobject
    OFF
    ON
    OpenRecordset
    OPTION
    OR
    ORDER
    Orientation
    Outer
    OWNERACCESS
-P
    Parameter
    PARAMETERS
    Partial
    PERCENT
    PIVOT
    PRIMARY
    PROCEDURE
    Property
-Q
    Queries
    Query
    Quit
-R
    REAL
    Recalc
    Recordset
    REFERENCES
    Refresh
    RefreshLink
    RegisterDatabase
    Relation
    Repaint
    RepairDatabase
    Report
    Reports
    Requery
    RIGHT
-S
    SCREEN
    SECTION
    SELECT
    SET
    SetFocus
    SetOption
    SHORT
    SINGLE
    SMALLINT
    SOME
    SQL
    StDev, StDevP
    STRING
    SIZE
    Sum
-T
    TABLE
    TableDef, TableDefs
    TableID
    TEXT
    TIME, TIMESTAMP
    TOP
    TRANSFORM
    TRUE
    Type
-U
    UNION
    UNIQUE
    update
    USER
-V
    VALUE
    VALUES
    Var, VarP
    VARBINARY, VARCHAR
-W
    WHERE
    WITH
    Workspace
-X
    Xor
-Y
    Year
    YES
    YESNO