【发布时间】:2016-12-18 04:21:18
【问题描述】:
我尝试分离我的本地数据库 .mdf 将其复制到另一个文件夹并在启动时附加新文件并在关闭时复制到旧文件夹。
它似乎在启动时有效,但在表单关闭时出现错误:
该进程无法访问文件“C:\ProgramData\MyData\db1.mdf”,因为它正被另一个进程使用。
这是我的代码:
public Form()
{
InitializeComponent();
DetachDatabase();
CopyDb();
AttachDatabase();
AppDomain.CurrentDomain.SetData("DataDirectory", Data.MyNewFolder);
}
public static bool DetachDatabase()
{
try
{
string connectionString = String.Format(@"Data Source=(LocalDB)\v11.0;Initial Catalog=master;Integrated Security=True");
using (var cn = new SqlConnection(connectionString))
{
cn.Open();
SqlCommand cmd = cn.CreateCommand();
cmd.CommandText = String.Format("exec sp_detach_db '{0}'", "db1");
cmd.ExecuteNonQuery();
cmd.CommandText = String.Format("exec sp_detach_db '{0}'", "db2");
cmd.ExecuteNonQuery();
return true;
}
}
catch
{
return false;
}
}
public static bool AttachDatabase()
{
try
{
string connectionString = String.Format(@"Data Source=(LocalDB)\v11.0;Initial Catalog=master;Integrated Security=True");
using (var cn = new SqlConnection(connectionString))
{
cn.Open();
SqlCommand cmd = cn.CreateCommand();
cmd.CommandText = String.Format("exec sys.sp_attach_db db1, 'db1.mdf'");
cmd.CommandText = String.Format("exec sys.sp_attach_db db2, 'db2.mdf'");
cmd.ExecuteNonQuery();
return true;
}
}
catch
{
return false;
}
}
private void Frm_FormClosing(object sender, FormClosingEventArgs e)
{
LocalDB.DetachDatabase();
CopyDb();
LocalDB.AttachDatabase();
}
有什么好的方法吗?
谢谢
【问题讨论】:
-
SQL Server 是一个基于服务器的数据库系统——所以最好的方法是NOT 摆弄
.mdf文件,然后将数据库留在服务器上 并连接到它并使用它
标签: c# sql-server local detach