Я попытался отделить мою локальную базу данных .mdf скопировать ее в другую папку и приложить новый файл при запуске и скопировать в старшую папку при закрытии.Отсоедините локальную базу данных .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 является ** на основе сервера ** система баз данных - поэтому ** лучший способ ** это *** НЕ *** скрипку вокруг с '.mdf' файлов и просто оставьте базу данных ** на сервере ** и подключитесь к ней и используйте ее –