1

SQL SERVER 2008R2 で SQL ファイルを実行するための小さなユーティリティを作成する必要があります。次のコードを試しました。

private static void ExecuteScripts()
{
      string sqlConnectionString = "UID=sa;password=passw0rd;Data Source=somesqlserver\\db01";
      DirectoryInfo info = new DirectoryInfo(@"c:\dxsh\);


      FileInfo[] fileInfos = info.GetFiles("1.8*");
      foreach (var fileInfo in fileInfos)
      {
           string script = fileInfo.OpenText().ReadToEnd();
           var conn = new SqlConnection(sqlConnectionString);
           var server = new Server(new ServerConnection(conn));
           server.ConnectionContext.ExecuteNonQuery(script);
      } 
 }

フォルダに次のファイルがあります

1. 1.8_DatabaseAndUsers.sql
2. 1.8_TablesAndTypes.sql
3. 1.8_Views.sql
4. 1.8_KeysAndIndex.sql
5. 1.8_ProceduresAndFunction.sql 

この順序でのみファイルを実行する必要があります。助けてください

4

2 に答える 2

3

ファイルを実行する順序がわかっている場合は、期待どおりの順序でファイルをフェッチするだけです。

string[] files = { "1.8_DatabaseAndUsers.sql", "1.8_TablesAndTypes.sql", ... };
foreach (var file in files)
{
    // Simpler way of reading files (and doesn't leave the file handle open)
    string text = File.ReadAllText(file);
    // using statement to avoid leaking resources
    using (var conn = new SqlConnection(...))
    {
        var server = new Server(new ServerConnection(conn));
        server.ConnectionContext.ExecuteNonQuery(script);
    }
}

基本的に、ファイルが返される順序に依存するべきではありませんGetFiles。特定の順序でファイルを返したい場合は、自分で強制してください。

別のオプションを使用GetFilesすることもできますが、ファイル名を適切に順序付けできることを確認してください。

1.8_01_DatabaseAndUsers.sql
1.8_02_TablesAndTypes.sql
1.8_03_Views.sql
1.8_04_KeysAndIndex.sql
1.8_05_ProceduresAndFunction.sql

そうすれば、プログラムで名前をハードコードする必要はありませんが、スクリプトを実行する前にファイル名をソートするだけで、順序を保証できます。

于 2013-08-06T10:23:07.760 に答える