2012-05-08 230 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