在实例上的数据库集合上运行.sql文件
本文关键字:运行 sql 集合 文件 数据库 实例 | 更新日期: 2023-09-27 18:12:21
FileInfo file = new FileInfo("C:''LS''SmartStats.sql");
string script = file.OpenText().ReadToEnd();
SqlConnection conn = new SqlConnection(sqlConnectionString);
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(script);
我不知道我从哪里偷了这个代码,但它在一个数据库上工作。
我是c#新手。
我想能够调用任何。sql文件从内部或外部的应用程序。我不能只是字符串。sql文件,并做一个foreach在任何给定的实例上的数据库集合?
//引用下列SMO集合
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Smo
//使用Microsoft.SqlServer.Management.Common;使用Microsoft.SqlServer.Management.Smo;
//
public static void ExecuteScript(string fname, List<string> databases)
{
string script = File.ReadAllText(fname);
ServerConnection conn = new ServerConnection("server-name/instance", "user", "password");
Server SMOServer = new Server(conn);
// foreach (Database db in SMOServer.Databases) //for all databases in server
foreach (var dbname in databases)
{
var db = SMOServer.Databases[dbname];
var ds = db.ExecuteWithResults(script); //if you want query result as a Dataset
//db.ExecuteNonQuery(script); // if you run non return query result, e.g update/insert/delete
}
conn.Disconnect();
}
我将假设您在某个地方有需要迭代的数据库列表,并且您可以计算出这一部分。
一旦你这样做了,使它工作的秘密是SQL USE
语句。你只需要在脚本的顶部动态地添加它,一切都应该正常工作。
FileInfo file = new FileInfo("C:''LS''SmartStats.sql");
string script = file.OpenText().ReadToEnd();
SqlConnection conn = new SqlConnection(sqlConnectionString);
Server server = new Server(new ServerConnection(conn));
var databaseNames = new List<String> {"database1", "database2"};
foreach (var databaseName in databaseNames)
{
server.ConnectionContext.ExecuteNonQuery("USE " + databaseName + Environment.NewLine + "GO" + Environment.NewLine + script);
}