2012-05-08 229 views
2

我喜歡在下面的代碼中使用FILENAME的參數,而不是N'D:\ DBName.mdf'和N'D:\ DBName.ldf'。C#使用腳本創建數據庫

如何在.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."); 
    } 
} 

回答

2

對您的腳本文件進行如下更改並保存。

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(); 
    } 
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的值到你的第二個參數值N'D:\Work\DBLocation\Files\Employee.ldf'

替換完成後將新文件保存在新的lo並用新名稱說dbMainCreate.sql

保存成功完成後,請按照您的代碼使用新參數創建數據庫。

注意:在存儲新文件之前,您可以檢查文件是否已經在該位置可用,如果是,則刪除現有文件,然後保存。您還可以將文件移動或複製到其他位置以保持版本控制。

+0

謝謝...明白了...... :) – kyusan93