如何从C#在单个文件中执行多个SQL脚本?
我正试图从C#在一个文件中执行多个SQL脚本。在脚本之间,我有如何从C#在单个文件中执行多个SQL脚本?,c#,sql-server,C#,Sql Server,我正试图从C#在一个文件中执行多个SQL脚本。在脚本之间,我有GO语句。这个脚本就像一个增量脚本,而且脚本会一天比一天增加。我尝试使用ExecuteReader()、ExecuteScalar()和ExecuteNonQuery(),但它抛出异常,说GO语法不正确 然后,我用GO拆分脚本,在一个循环中,我尝试在脚本有Declare@xyz DataType的地方执行脚本,并抛出异常 请建议如何从C#执行这样的脚本 我会尝试只打开一次连接来运行脚本的所有部分 伪代码: use (var conne
GO
语句。这个脚本就像一个增量脚本,而且脚本会一天比一天增加。我尝试使用ExecuteReader()
、ExecuteScalar()
和ExecuteNonQuery()
,但它抛出异常,说GO
语法不正确
然后,我用GO
拆分脚本,在一个循环中,我尝试在脚本有Declare@xyz DataType
的地方执行脚本,并抛出异常
请建议如何从C#执行这样的脚本
我会尝试只打开一次连接来运行脚本的所有部分 伪代码:
use (var connection ...)
{
connection.Open();
foreach (var sqlBatch in ...)
{
use (var command = new Command(..., connection))
{
command.CommandText = sqlBatch;
...
command.ExecuteNonQuery();
}
}
}
您可以使用
SMO
SMO作为部署的额外工具(特别是当您必须支持不同的SQL Server版本时)。我不会只使用SMO来运行SQL脚本。另外,事务实现可能会有所帮助。只是一个想法@影子:很难说。大多数脚本都是自己进行事务处理的。但这确实是一个值得考虑的问题。谢谢你,Stefan Steinegger。
use (var connection ...)
{
connection.Open();
foreach (var sqlBatch in ...)
{
use (var command = new Command(..., connection))
{
command.CommandText = sqlBatch;
...
command.ExecuteNonQuery();
}
}
}