Как решить синтаксическую ошибку в предложении FROM? - PullRequest
0 голосов
/ 06 марта 2020

Я получаю эту ошибку, но мои 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

1 Ответ

1 голос
/ 06 марта 2020

Level - зарезервированное слово в JET Red SQL (MS Access SQL) и T- SQL для MS SQL Server.

Как есть Description, Memo, Name и несколько других .

Вы можете избежать зарезервированных слов, заключив их в квадратные скобки, например: [Level].

Так что замените SQL строку следующим образом:

string getLevel = "SELECT * FROM [Level] WHERE [Level].LevelID = @LevelID";

Для потомков (потому что я поставлю 50 долларов на то, что MS будет медленно допускать документацию MS Access d ie, учитывая, что MS Access не был значительно обновлен с 2007 года, а язык JET Red SQL не изменялся с 2002 года), вот список всех задокументированных зарезервированных слов из 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, объектов доступа к данным, поставщика OLE Microsoft для ядра базы данных Access или Microsoft Ac драйвер cess ODB C. Он может быть запущен как в режиме 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...