如何用C#代码编写这个DOS命令?

时间:2012-10-03 04:18:11

标签: c# batch-file cmd

我想在文件夹中执行所有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#代码

3 个答案:

答案 0 :(得分:2)

如果您使用的是C#,则应使用C#中可用的工具。 Sql Server有一个随Sql Server安装一起提供的SDK。

您需要至少添加Microsoft.SqlServer.Smo.dllMicrosoft.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#代码然后再一些命令等等 那么你将需要多个批处理文件,这将是凌乱的方式。