我试图在C#的单个文件中执行多个SQL脚本。在脚本之间我有GO
个语句。该脚本就像一个增量脚本,并且日常脚本会增加。我尝试使用ExecuteReader()
,ExecuteScalar()
和ExecuteNonQuery()
,但它抛出异常,说GO
语法不正确。
然后我用GO
拆分脚本并在一个循环中,我试图在那里执行脚本将Declare @xyz DataType
抛出异常的地方。
请建议我如何从C#执行此类脚本。
foreach (var sqlBatch in ScriptDetails.Split(new[] { "GO", "Go", "go", "gO" }, StringSplitOptions.RemoveEmptyEntries))
{
try
{
string[] prefixes = { "--", "/*" };
bool resultchk = prefixes.Any(prefix => sqlBatch.StartsWith(prefix));
if (!resultchk)
{
connection.Open();
command.CommandText = sqlBatch;
command.ExecuteNonQuery();//ExecuteReader(); ExecuteScalar()
connection.Close();
Result.Add(new SQLResult { Final_message = "Success" });
}
}
catch (SqlException ex)
{
Result.Add(new SQLResult { Final_message = ex.Message.ToString(), Line_No = ex.LineNumber });
connection.Close();
}
}
答案 0 :(得分:1)
我会尝试只打开一次连接来运行脚本的所有部分。
的伪代码:
use (var connection ...)
{
connection.Open();
foreach (var sqlBatch in ...)
{
use (var command = new Command(..., connection))
{
command.CommandText = sqlBatch;
...
command.ExecuteNonQuery();
}
}
}