我遇到的一件事就是将app部署到没有安装SMO的机器上。我想执行具有GO
语句的脚本,但也希望避免在目标机器上安装SMO包或解析SQL脚本文件(因为我不知道sql脚本是否包含函数或SP) 。
我尝试将SMO relevenat dll手动复制到可执行文件的bin文件夹中,但是运行该应用程序总是需要一些其他的dll。
对此有何帮助?
答案 0 :(得分:3)
除了SMO,sqlcmd实用程序可以理解GO语句。您需要使用System.Diagnostics.Process
以脚本作为参数调用它。
我不是说这是 这样做的方式,但它是一个有效的替代方案。如果目标计算机上不存在该实用程序,则仍然存在与以前相同的问题。
您也可以使用安装程序包部署SMO,而无需在目标计算机上“安装”它:
答案 1 :(得分:0)
我发现以下解决方案经过了充分测试
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();
}
}