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