我想在文件夹中执行所有sql文件。我发现this question中的答案很有帮助。我可以使用他们的命令,它可以按预期工作。
我想从C#代码运行它。我尝试了几种方法,但我无法得到结果。以下是我尝试但未成功的代码。
Process process = new Process();
Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = string.Format("for %f in ({2}/*.sql) do sqlcmd /S {0} /d {1} /U {3} /P {4} /E /i {5}",
sqlServerName, databaseName, folder, sqlUserName, sqlPassword, @"""%f""");
process.StartInfo.WorkingDirectory = @"C:\";
process.Start();
process.WaitForExit();
我想知道如何将此DOS命令for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
移动到C#代码
答案 0 :(得分:2)
如果您使用的是C#,则应使用C#中可用的工具。 Sql Server有一个随Sql Server安装一起提供的SDK。
您需要至少添加Microsoft.SqlServer.Smo.dll
和Microsoft.SqlServer.ConnectionInfo.dll
才能使用以下代码。
ServerConnection connection = new ServerConnection(sqlServerName, sqlUserName, sqlPassword);
Server server = new Server(connection);
Database database = server.Databases[databaseName];
foreach (var sqlFile in Directory.EnumerateFiles(folder, "*.sql"))
{
//Parses the file and runs the batches
database.ExecuteNonQuery(File.ReadAllText(sqlFile));
}
这将读取每个文件,将文件分开批处理(GO
语句),然后运行查询。
答案 1 :(得分:1)
此代码可能会有所帮助......
var SqlFile = @"...";
var Command = new SqlCommand
{
CommandType = CommandType.Text,
Connection = new SqlConnection()
};
Command.Connection.Open();
foreach (var CommandText in File.ReadAllText(SqlFile).Replace("GO", ";").Split(';'))
{
Command.CommandText = CommandText;
Command.ExecuteNonQuery();
}
Command.Connection.Close();
答案 2 :(得分:0)
如果你想一起运行所有命令,那么简单的方法是创建batch
文件
并使用它 -
Process myProcess = new Process();
myProcess = Process.Start(@"Test.bat");
但是如果你想运行一些命令,那么一些C#代码然后再一些命令等等 那么你将需要多个批处理文件,这将是凌乱的方式。