在没有 SMO 的情况下使用 GO 语句执行 SQL 脚本
本文关键字:语句 GO 执行 SQL 脚本 SMO 情况下 | 更新日期: 2023-09-27 18:37:14
我遇到问题的一件事是将应用程序部署到没有安装 SMO 的机器上。我想执行具有GO
语句的脚本,但也想避免在目标计算机上安装 SMO 包或解析 SQL 脚本文件(因为我不知道 sql 脚本是否包含函数或 SP)。
我尝试手动将SMO relevenat dlls复制到可执行文件的bin文件夹中,但运行该应用程序总是需要其他一些dll。
对此有任何帮助吗?
除了 SMO 之外,sqlcmd 实用程序可以理解 GO 语句。 您将需要使用System.Diagnostics.Process
才能用脚本作为参数来调用它。
我绝不是说这是这样做的方法,但它是一个有效的替代方案。如果目标计算机上不存在该实用程序,您仍然会遇到与以前相同的问题。
您还可以使用安装程序包部署 SMO,而无需将其"安装"在目标计算机上:
在安装和部署中嵌入 SMO dll
我发现下面的解决方案经过了很好的测试
using (SqlConnection cn = new SqlConnection(connectionString))
{
try
{
cn.Open();
FileInfo file = new FileInfo(fileName);
string script = file.OpenText().ReadToEnd();
string[] splitChar = { "'r'nGO'r'n" };
var sqlLines = script.Split(splitChar, StringSplitOptions.RemoveEmptyEntries);
int res = 0;
SqlCommand cmd = null;
foreach (var query in sqlLines)
{
cmd = new SqlCommand(query, cn)
{
CommandTimeout = 5400
};
res = cmd.ExecuteNonQuery();
}
cn.Close();
}
catch (Exception ex)
{
msg = ex.Message;
}
finally
{
cn.Close();
}
}