Ошибка: «Произошла ошибка при разборе запроса.» При попытке создать таблицу SQL Server CE

1

Я пытаюсь создать таблицу в моей базе данных SQL Server CE. Я получаю сообщение об ошибке. Я думал, что это ' имя", но даже запускать его только с номерами, я получаю ту же ошибку. Я сделал распечатку по команде и запустил ее по адресу: http://www.w3schools.com/sql/trysql.asp?filename=trysql_create_table, и она отлично работала. Может ли кто-то направить меня в правильное русло того, чего мне не хватает?

Вот ошибка:

Произошла ошибка при анализе запроса. [Токен в строке номер = 1, смещение линии токена 13, токен по ошибке 191019]

Вот код:

    public static void CreateDataTable(string dataBase, string tableName)
    {
        try
        {
            tableName = "John License_191019";
            var createUser = string.Format(@"CREATE TABLE [{0}] (
                   [Identifier]  INT NOT NULL ,
                   [Id]  INT NULL ,
                   [Name]  NVARCHAR(255) NULL ,
                   [Zone]  INT NULL ,
                   [Map]  INT NULL ,
                   [State]  NVARCHAR(255) NULL ,
                   [Type]  NVARCHAR(255) NULL ,
                   [Faction]  NVARCHAR(255) NULL ,
                   [X]  FLOAT NULL ,
                   [Y]  FLOAT NULL ,
                   [Z]  FLOAT NULL ,
                   [Create_Date]  DATETIME NULL ,
                   [Update_Date]  DATETIME NULL ,
                   PRIMARY KEY ([Identifier]))", tableName);

            using (var conn = new SqlCeConnection(SQLHelper.Connection(dataBase)))
            {
                conn.Open();

                using (var cmd = new SqlCeCommand(createUser, conn))
                {
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("ExecuteNonQuery: " + ex);
                    }
                    finally
                    {
                        cmd.Dispose();
                    }
                }

                conn.Close();
                conn.Dispose();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("CreateDataTable: " + ex);
            throw;
        }
    }

Как печатается строка:

CREATE TABLE [John License_191019] ([Идентификатор] INT NOT NULL, [Id] INT NULL, [Name] NVARCHAR (255) NULL, [Zone] INT NULL, [Map] INT NULL, [State] NVARCHAR (255) NULL, [Тип] NVARCHAR (255) NULL, [Faction] NVARCHAR (255) NULL, [X] FLOAT NULL, [Y] FLOAT NULL, [Z] FLOAT NULL, [Create_Date] DATETIME NULL, [Update_Date] DATETIME NULL, PRIMARY KEY ([Идентификатор]))

Теги:
sql-server-ce

1 ответ

1
Лучший ответ

Правильные разделители для Sql Compact Edition не являются обратными окнами, но квадратные скобки Open/Close

var createUser = @"CREATE TABLE [John License_191019] (
                       [Identifier]  INT NOT NULL,
                       [Id]  INT NULL ,
                       [Name]  NVARCHAR(255) NULL ,
                       [Zone]  INT NULL ,
                       [Map]  INT NULL ,
                       [State]  NVARCHAR(255) NULL ,
                       [Type]  NVARCHAR(255) NULL ,
                       [Faction]  NVARCHAR(255) NULL ,
                       [X]  FLOAT NULL ,
                       [Y]  FLOAT NULL ,
                       [Z]  FLOAT NULL ,
                       [Create_Date]  DATETIME NULL ,
                       [Update_Date]  DATETIME NULL ,
                       PRIMARY KEY ([Identifier]))";

Кстати, ваш код выше не нужен string.Format (опечатка?)

И две последние заметки.
Пустая Try/Catch - очень плохая практика. Я предлагаю удалить его или обработать исключение.
Оператор using statement устраняет необходимость вызова Close и Dispose для задействованных объектов.

  • 0
    Формат строки был таким, что я не удалял его перед вставкой кода. Имя таблицы фактически передается в метод. Я просто использовал имя таблицы "John's License_191019" в качестве контрольного примера. Также есть код для try catch, который я удалил. По сути просто регистрация кода, который не имеет отношения к проблеме =).
  • 0
    Я получил эту ошибку: «Произошла ошибка при синтаксическом анализе запроса. [Токен в строке номер = 1, смещение строки токена 13, Токен в ошибке 191019]» Я использовал ваш код, но на этот раз я сделал это, используя строку. Формат и сделал "John's Licenses_191019" строка.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню