2

FILENAME以下のコードでは、N'D:\DBName.mdf' や N'D:\DBName.ldf' の代わりにパラメータを使用するのが好きです。

ファイル内で変更するにはどうすればよい.sqlですか? また、パラメータを使用して C# から呼び出すにはどうすればよいですか? ありがとう。

SQL スクリプト:

CREATE DATABASE [DBName] ON  PRIMARY 
( NAME = N'DBName', FILENAME = N'D:\DBName.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'DBName_log', FILENAME = N'D:\DBName.ldf' , SIZE = 3456KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
END

C# コード

string appPathDB = Path.GetDirectoryName(Application.ExecutablePath) + "\\DBName.mdf";
string appPathLog = Path.GetDirectoryName(Application.ExecutablePath) + "\\DBName_log.ldf";

private void CreateDatabase()
{
   string connection = "Data Source=localhost;Initial Catalog=master;User ID=sa;Password=abcd1234";
   FileInfo file = new FileInfo(Path.GetDirectoryName(Application.ExecutablePath) + "\\DBName.sql");
   string script = file.OpenText().ReadToEnd();
   ExecSql(script, connection, "DBName");
   file.OpenText().Close();
}

public void ExecSql(string sql, string connectionString, string dataBaseNameToPrepend)
{
   using (SqlConnection conn = new SqlConnection(connectionString))
   {
      conn.Open();
      Server server = new Server(new ServerConnection(conn));
      server.ConnectionContext.ExecuteNonQuery(sql);
      server.ConnectionContext.Disconnect();
      server.ConnectionContext.ExecuteNonQuery(sql);
      MessageBox.Show("DB Uploaded.");
   }
}
4

2 に答える 2

3

スクリプト ファイルに以下の変更を加えて保存します。

CREATE DATABASE [DBName] ON  PRIMARY 
( NAME = N'DBName', FILENAME = N'DB_NAME_MDF' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'DBName_log', FILENAME = N'DB_NAME_LDF' , SIZE = 3456KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
END

以下の行をコードに追加します。

private void CreateDatabase()
    {
        string connection = "Data Source=localhost;Initial Catalog=master;User ID=sa;Password=abcd1234";
        FileInfo file = new FileInfo(Path.GetDirectoryName(Application.ExecutablePath) + "\\DBName.sql");
        string script = file.OpenText().ReadToEnd();
        script = script.Replace("DB_NAME_MDF", appPathDB).Replace("DB_NAME_LDF", appPathLog);
        ExecSql(script, connection, "DBName");
        file.OpenText().Close();
    }
于 2012-05-08T06:41:32.140 に答える
1

これについては、さまざまな働き方があると思います。

しかし、私によると、ここで作業を見つけるためのシンプルで簡単な方法は次のとおりです。

dbcreate.sqlなどのファイルを作成します

CREATE DATABASE [DBName] ON  PRIMARY 
( NAME = N'DBName', FILENAME = XXXMDFXXX , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'DBName_log', FILENAME = XXXLDFXXX , SIZE = 3456KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
END

このファイルをアプリケーション内の場所に保持し、このファイルを C# コードで読み取り、値をXXXMDFXXXパラメーター値に置き換え、 N'D:\Work\DBLocation\Files\Employee.mdf'XXXLDFXXX を 2 番目のパラメーター値に置き換えます。N'D:\Work\DBLocation\Files\Employee.ldf'

置換が完了したら、新しいファイルを新しい場所に保存し、新しい名前で dbMainCreate.sql と言います

保存が正常に完了したら、コードに従って、新しいパラメーターを使用してデータベースを作成します。

注:新しいファイルを保存する前に、その場所でファイルが既に利用可能かどうかを確認し、存在する場合は既存のファイルを削除してから保存します。ファイルを別の場所に移動またはコピーして、バージョン管理を維持することもできます。

于 2012-05-08T06:37:22.520 に答える