代码导读:|DataDirectory|
对于用户计算机上的应用程序而言,|DataDirectory|变量代表的路径就是应用程序的.exe文件所在位置的路径。
对于使用ClickOnce所部署的应用程序而言,|DataDirectory|变量所代表的路径则是ClickOnce所建立的特殊文件目录。
对于Web应用程序而言,|DataDirectory|变量所代表的路径就是App_Date文件夹。
也可以根据自己的需要设置|DataDirectory|的默认值,代码:AppDomain.CurrentDomain.SetData("DataDirectory",newpath)
方法一:通过master数据库中的存储过程来附加\分离数据库(推荐)
public class DataBaseControl { /// <summary> /// 实例化一个数据库连接对象 /// </summary> private SqlConnection conn; /// <summary> /// 实例化一个新的数据库操作对象Comm /// </summary> private SqlCommand comm; /// <summary> /// 要操作的数据库名称 /// </summary> /// <summary> /// 数据库连接字符串 /// </summary> private string connectionString; public string ConnectionString { get { return connectionString; } set { connectionString = value; } } /// <summary> /// SQL操作语句/存储过程 /// </summary> private string strSQL; public string StrSQL { get { return strSQL; } set { strSQL = value; } } /// <summary> /// 要操作的数据库名称 /// </summary> private string dataBaseName; public string DataBaseName { get { return dataBaseName; } set { dataBaseName = value; } } /// <summary> /// 数据库文件完整地址 /// </summary> private string dataBase_MDF; public string DataBase_MDF { get { return dataBase_MDF; } set { dataBase_MDF = value; } } /// <summary> /// 数据库日志文件完整地址 /// </summary> private string dataBase_LDF; public string DataBase_LDF { get { return dataBase_LDF; } set { dataBase_LDF = value; } } /// <summary> /// 附加数据库 /// </summary> public void AttachDB() { try { conn = new SqlConnection(connectionString); conn.Open(); comm = new SqlCommand(); comm.Connection = conn; comm.CommandText = " sp_attach_db " ; // 系统数据库master 中的一个附加数据库存储过程。 comm.Parameters.Add( new SqlParameter( @" dbname " , SqlDbType.NVarChar)); comm.Parameters[ @" dbname " ].Value = dataBaseName; comm.Parameters.Add( new SqlParameter( @" filename1 " , SqlDbType.NVarChar)); // 一个主文件mdf,一个或者多个日志文件ldf,或次要文件ndf comm.Parameters[ @" filename1 " ].Value = dataBase_MDF; comm.Parameters.Add( new SqlParameter( @" filename2 " , SqlDbType.NVarChar)); comm.Parameters[ @" filename2 " ].Value = dataBase_LDF; comm.CommandType = CommandType.StoredProcedure; comm.ExecuteNonQuery(); MessageBox.Show( " 附加数据库成功 " , " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information); } finally { conn.Close(); } } /// <summary> /// 分离数据库 /// </summary> public void detachDB() { try { conn = new SqlConnection(connectionString); conn.Open(); comm = new SqlCommand(); comm.Connection = conn; comm.CommandText = @" sp_detach_db " ; // 系统数据库master 中的一个分离数据库存储过程。 comm.Parameters.Add( new SqlParameter( @" dbname " , SqlDbType.NVarChar)); comm.Parameters[ @" dbname " ].Value = dataBaseName; comm.CommandType = CommandType.StoredProcedure; comm.ExecuteNonQuery(); MessageBox.Show( " 分离数据库成功 " , " 信息提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, " 信息提示 " , MessageBoxButtons.OK, MessageBoxIcon.Information); } finally { conn.Close(); } } }} // 操作界面事件 private void btnAttachDB_Click( object sender, EventArgs e) { DataBaseControl DBC = new DataBaseControl(); DBC.ConnectionString = " Data Source=.; Initial Catalog=master;Integrated Security=SSPI " ; DBC.DataBaseName = " dbHotelSystem " ; DBC.DataBase_MDF = Directory.GetParent( @" Hotel.MDF " ) + " \\dbHotelSystem.MDF " ; DBC.DataBase_LDF = Directory.GetParent( @" Hotel.MDF " ) + " \\dbHotelSystem_log.ldf " ; DBC.AttachDB(); } private void btnDetachDB_Click( object sender, EventArgs e) { DataBaseControl DBC = new DataBaseControl(); DBC.ConnectionString = " Data Source=.; Initial Catalog=master;Integrated Security=SSPI " ; DBC.DataBaseName = " dbHotelSystem " ; DBC.detachDB(); }
方法二:通过Connection 来设置
public bool attachDB() { // 利用 SqlConnectionStringBuilder 对象来构建连接字符串。 using System.Data.SqlClient; SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(); connectionStringBuilder.DataSource = " . " ; // 使用相对路径的手法来指定所要附加的 SQL Server 数据库文件。 connectionStringBuilder.AttachDBFilename = @" |DataDirectory|test.mdf " ; connectionStringBuilder.IntegratedSecurity = true ; // 附加数据库 connectionStringBuilder.UserInstance = false ; // 从新设定附加至 SQL Server 实例的数据库名称 connectionStringBuilder.InitialCatalog = " test " ; try { SqlConnection con = new SqlConnection(connectionStringBuilder.ConnectionString); con.Open(); return true ; // 附加数据库成功! } catch (Exception ex) { throw new Exception(ex.ToString()); } }
转载于:https://www.cnblogs.com/nnkook/archive/2010/01/07/1641610.html
相关资源:Visual Studio C# SQL Server数据库开发与实例