我遇到此错误,但是我的sql语句并不复杂,所以我不知道自己在做什么错,它们对我来说似乎很好。我虽然可能是我的连接字符串,但看起来也不错。需要帮助。
public string conn = @"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Users\Callum\Documents\College\Computer Science\MAZE GAME\MAZE GAME\Database2.mdb";
string getLevel = "SELECT * FROM Level WHERE Level.LevelID = @LevelID";
string getWall = "SELECT * FROM Wall WHERE Wall.LevelID = @LevelID";
string getMonster = "SELECT * FROM Monster WHERE Monster.LevelID = @LevelID";
//get values to build levels
using (OleDbConnection Conn = new OleDbConnection(conn))
{
try
{
Conn.Open();
using (OleDbCommand levelCmd = new OleDbCommand(getLevel, Conn))
{
levelCmd.Parameters.AddWithValue("@LevelID", LevelID);
levelCmd.Parameters["@LevelID"].Value = LevelID;
using (OleDbDataReader levelReader = levelCmd.ExecuteReader())//this is where the error is shown
答案 0 :(得分:1)
Level
是JET Red SQL(MS Access SQL)和MS SQL Server的T-SQL中的保留字。
As is Description
, Memo
, Name
, and a few others。
您可以通过将保留字括在方括号中来逃脱,例如:[Level
]。
因此将您的SQL字符串更改为此:
string getLevel = "SELECT * FROM [Level] WHERE [Level].LevelID = @LevelID";
对于后代(由于我打赌50美元,考虑到MS Access自2007年以来未进行重大更新,并且自2002年以来未更改JET Red SQL语言,MS会让MS Access文档缓慢死亡),这是一个https://support.office.com/en-us/article/learn-about-access-reserved-words-and-symbols-ae9d9ada-3255-4b12-91a9-f855bdd9c5a2中所有已记录保留字的列表:
ADD
ALL
Alphanumeric
ALTER
AND
ANY
Application
AS
ASC
Assistant
AUTOINCREMENT
Avg
BETWEEN
BINARY
BIT
BOOLEAN
BY
BYTE
CHAR, CHARACTER
COLUMN
CompactDatabase
CONSTRAINT
Container
Count
COUNTER
CREATE
CreateDatabase
CreateField
CreateGroup
CreateIndex
CreateObject
CreateProperty
CreateRelation
CreateTableDef
CreateUser
CreateWorkspace
CURRENCY
CurrentUser
DATABASE
DATE
DATETIME
DELETE
DESC
Description
DISALLOW
DISTINCT
DISTINCTROW
Document
DOUBLE
DROP
Echo
Else
End
Eqv
Error
EXISTS
Exit
FALSE
Field, Fields
FillCache
FLOAT, FLOAT4, FLOAT8
FOREIGN
Form, Forms
FROM
Full
FUNCTION
GENERAL
GetObject
GetOption
GotoPage
GROUP
GROUP BY
GUID
HAVING
Idle
IEEEDOUBLE, IEEESINGLE
If
IGNORE
Imp
IN
INDEX
Index, Indexes
INNER
INSERT
InsertText
INT, INTEGER, INTEGER1, INTEGER2, INTEGER4
INTO
IS
JOIN
KEY
LastModified
LEFT
Level
Like
LOGICAL, LOGICAL1
LONG, LONGBINARY, LONGTEXT
Macro
Match
Max, Min, Mod
MEMO
Module
MONEY
Move
NAME
NewPassword
NO
Not
Note
NULL
NUMBER, NUMERIC
Object
OLEOBJECT
OFF
ON
OpenRecordset
OPTION
OR
ORDER
Orientation
Outer
OWNERACCESS
Parameter
PARAMETERS
Partial
PERCENT
PIVOT
PRIMARY
PROCEDURE
Property
Queries
Query
Quit
REAL
Recalc
Recordset
REFERENCES
Refresh
RefreshLink
RegisterDatabase
Relation
Repaint
RepairDatabase
Report
Reports
Requery
RIGHT
SCREEN
SECTION
SELECT
SET
SetFocus
SetOption
SHORT
SINGLE
SMALLINT
SOME
SQL
StDev, StDevP
STRING
Sum
TABLE
TableDef, TableDefs
TableID
TEXT
TIME, TIMESTAMP
TOP
TRANSFORM
TRUE
Type
UNION
UNIQUE
UPDATE
USER
VALUE
VALUES
Var, VarP
VARBINARY, VARCHAR
WHERE
WITH
Workspace
Xor
Year
YES
YESNO
以下符号不能用作字段名称或对象名称的一部分:
.
/
*
;
:
!
#
&
-
?
"
'
$
%
Access数据库引擎以不同的模式运行,具体取决于是从Access,数据访问对象,Access数据库引擎的Microsoft OLE Provider还是Microsoft Access ODBC驱动程序调用它。它可以在ANSI模式或非ANSI(传统)模式下运行。 因为使用这两种模式会导致两组保留字稍有不同,所以使用保留字的查询可能在一种模式下工作,而在另一种模式下失败。
以下是选择标识符名称时要避免使用的保留字列表。
ABSOLUTE
ACTION
ADD
ADMINDB
ALL
ALLOCATE
ALPHANUMERIC
ALTER
AND
ANY
ARE
AS
ASC
ASSERTION
AT
AUTHORIZATION
AUTOINCREMENT
AVG
BAND
BEGIN
BETWEEN
BINARY
BIT
BIT_LENGTH
BNOT
BOR
BOTH
BXOR
BY
BYTE
CASCADE
CASCADED
CASE
CAST
CATALOG
CHAR
CHARACTER
CHAR_LENGTH
CHARACTER_LENGTH
CHECK
CLOSE
COALESCE
COLLATE
COLLATION
COLUMN
COMMIT
COMP
COMPRESSION
CONNECT
CONNECTION
CONSTRAINT
CONSTRAINTS
CONTAINER
CONTINUE
CONVERT
CORRESPONDING
COUNT
COUNTER
CREATE
CREATEDB
CROSS
CURRENCY
CURRENT
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
CURSOR
DATABASE
DATE
DATETIME
DAY
DEALLOCATE
DEC
DECIMAL
DECLARE
DEFAULT
DEFERRABLE
DEFERRED
DELETE
DESC
DESCRIBE
DESCRIPTOR
DIAGNOSTICS
DISALLOW
DISCONNECT
DISTINCT
DOMAIN
DOUBLE
DROP
ELSE
END
END-EXEC
ESCAPE
EXCEPT
EXCEPTION
EXCLUSIVECONNECT
EXEC
EXECUTE
EXISTS
EXTERNAL
EXTRACT
FALSE
FETCH
FIRST
FLOAT
FLOAT4
FLOAT8
FOR
FOREIGN
FOUND
FROM
FULL
GENERAL
GET
GLOBAL
GO
GOTO
GRANT
GROUP
GUID
HAVING
HOUR
IDENTITY
IEEEDOUBLE
IEEESINGLE
IGNORE
IMAGE
IMMEDIATE
ININDEX
INDICATOR
INHERITABLE
INITIALLY
INNER
INPUT
INSENSITIVE
INSERT
INT
INTEGER
INTEGER1
INTEGER2
INTEGER4
INTERSECT
INTERVAL
INTO
IS
ISOLATION
JOIN
KEY
LANGUAGE
LAST
LEADING
LEFT
LEVEL
LIKE
LOCAL
LOGICAL
LOGICAL1
LONG
LONGBINARY
LONGCHAR
LONGTEXT
LOWER
MATCH
MAX
MEMO
MIN
MINUTE
MODULE
MONEY
MONTH
NAMES
NATIONAL
NATURAL
NCHAR
NEXT
NO
NOT
NOTE
NULL
NULLIF
NUMBER
NUMERIC
OBJECT
OCTET_LENGTH
OFOLEOBJECT
ONONLY
OPEN
OPTION
ORORDER
OUTER
OUTPUT
OVERLAPS
OWNERACCESS
PAD
PARAMETERS
PARTIAL
PASSWORD
PERCENT
PIVOT
POSITION
PRECISION
PREPARE
PRESERVE
PRIMARY
PRIOR
PRIVILEGES
PROC
PROCEDURE
PUBLIC
READ
REAL
REFERENCES
RELATIVE
RESTRICT
REVOKE
RIGHT
ROLLBACK
ROWS
SCHEMA
SCROLL
SECOND
SECTION
SELECT
SELECTSCHEMA
SELECTSECURITY
SESSION
SESSION_USER
SET
SHORT
SINGLE
SIZE
SMALLINT
SOME
SPACE
SQL
SQLCODE
SQLERROR
SQLSTATE
STRING
SUBSTRING
SUM
SYSTEM_USER
TABLE
TABLEID
TEMPORARY
TEXT
THEN
TIME
TIMESTAMP
TIMEZONE_HOUR
TIMEZONE_MINUTE
TO
TOP
TRAILING
TRANSACTION
TRANSFORM
TRANSLATE
TRANSLATION
TRIM
TRUE
UNION
UNIQUE
UNIQUEIDENTIFIER
UNKNOWN
UPDATE
UPDATEIDENTITY
UPDATEOWNER
UPDATESECURITY
UPPER
USAGE
USER
USING
VALUE
VALUES
VARBINARY
VARCHAR
VARYING
VIEW
WHEN
WHENEVER
WHERE
WITH
WORK
WRITE
YEAR
YESNO
ZONE