【发布时间】:2019-08-17 23:18:30
【问题描述】:
我想运行我首先从 .sql 文件中读取的 sql 语句。
我收到此错误:
{"There was an error parsing the query. [ Token line number = 13,Token line offset = 1,Token in error = ALTER ]"}
.sql文件中有我的sql语句:
CREATE TABLE [Test]
(
[Id] INT NOT NULL IDENTITY (1,1),
[DatabaseVersion] NVARCHAR(20) NOT NULL,
[Autorun] BIT,
[CurrentCulture] NVARCHAR(10),
[MailNotificationEnabled] BIT,
[RefreshInterval] INT,
[ModifiedDate] DATETIME NOT NULL,
[schemat] NVARCHAR(255)
)
ALTER TABLE [Test] ADD CONSTRAINT [PK_Test] PRIMARY KEY ([Id])
UPDATE [AppConfig]
SET [DatabaseVersion] = '0.12'
读取文件:
string oldVersion = GetOldDatabaseVersion();
string sqlScript = "";
sqlScript = GetScriptFromAssembly(oldVersion,
ConfigurationSettings.ValidDatabaseVersion);
ExecuteNonQuery(CommandType.Text, sqlScript);
ExecuteNonQuery方法:
public int ExecuteNonQuery(CommandType type, string sql)
{
using (SqlCeConnection connection = CreateConnection())
{
return ExecuteNonQuery(connection, type, sql);
}
}
private int ExecuteNonQuery(SqlCeConnection connection, CommandType type, string sql)
{
using (SqlCeCommand command = new SqlCeCommand())
{
command.Connection = connection;
command.CommandType = type;
command.CommandText = sql;
return command.ExecuteNonQuery();
}
}
我不知道如何解决它。当我在 db 上直接运行脚本时,它可以工作。
【问题讨论】:
-
我猜SqlCommand 需要用
;分隔命令?这只是一个猜测,因为它似乎无法识别ALTER开始一个新语句。 -
我试过了;/
-
我现在所做的 - 分别运行每个语句(创建、更改等)。有用。但是我不想在单独的文件中创建所有语句;/
标签: c# parsing sql-server-ce executenonquery