Я пытаюсь создать таблицу в моей базе данных 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 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 для задействованных объектов.