2

フォルダ内のすべてのSQLファイルを実行したい。この質問の答えは役に立ちました。私は彼らのコマンドを使うことができ、それは期待通りに機能します。

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();

for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"このDOSコマンドをC#コードに移動する方法を知りたい

4

3 に答える 3

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ステートメント) に分割されてから、クエリが実行されます。

于 2012-10-03T06:02:48.157 に答える
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();
于 2012-10-03T05:32:24.457 に答える
0

すべてのコマンドを一緒に実行したい場合、簡単な方法はbatchファイル
を作成してこれを使用することです -

Process myProcess = new Process();
myProcess = Process.Start(@"Test.bat");

しかし、いくつかのコマンドを実行し、次にいくつかの C# コードを実行し、次にいくつかのコマンドなどを実行する場合は、
複数のバッチ ファイルが必要になり、面倒な方法になります。

于 2012-10-03T05:05:00.710 に答える