当我的 C# 应用程序是 运行 时无法复制或使用我的 SQL 服务器数据库
Unable to copy or use my SQL Server database while my C# app is running
我是 SQL 服务器的新手,遇到了一些非常基本的问题(看起来如此!)。我正在通过我的 C# 应用程序访问我的本地 SQL 服务器数据库文件。
我想要的是能够随时通过我的 C# 应用程序在 ftp 服务器上创建本地数据库的备份。但是每当我尝试上传数据库文件(甚至使用 windows 资源管理器复制)时,我都会收到错误消息
Action cannot be completed because file is open in SQL Server
每次加载我的应用程序中的表单时,我都会通过调用此函数获取产品列表:
private void populate_products()
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;"+
"AttachDbFilename=" + AppDomain.CurrentDomain.BaseDirectory + "myDB.mdf;" +
"Integrated Security=True;Connect Timeout=30;User Instance=True";
con.Open();
try
{
SqlCommand cmd;
string cmd1 = "SELECT Name,Cost FROM Product";
cmd = new SqlCommand(cmd1, con);
SqlDataReader read = cmd.ExecuteReader();
bool ch = true;
while (read.Read())
{
list_name.Items.Add(read[0].ToString());
costs.Add(read[1].ToString());
}
read.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
con.Close();
con.Dispose();
}
调用此函数后文件无法复制。由于调用了 con.Close()
我想知道为什么文件仍在使用中。
即使从 SQL Server Management Studio 中分离数据库也不起作用。有人可以帮忙吗?
您需要清除连接池。
尝试添加
SqlConnection.ClearAllPools();
方法结束时。
另一种方法是创建一个备份,然后上传该备份而不是您装载的数据库文件。
您可以使用此 SQL 命令创建备份:
BACKUP DATABASE [DATABASENAME] TO DISK = 'c:\path\backup.bak' WITH FORMAT, INIT, STATS = 25
根据需要更改 DATABASENAME
和 c:\path\backup.bak
。然后您可以选择 bak 文件,并从那里上传。
我是 SQL 服务器的新手,遇到了一些非常基本的问题(看起来如此!)。我正在通过我的 C# 应用程序访问我的本地 SQL 服务器数据库文件。
我想要的是能够随时通过我的 C# 应用程序在 ftp 服务器上创建本地数据库的备份。但是每当我尝试上传数据库文件(甚至使用 windows 资源管理器复制)时,我都会收到错误消息
Action cannot be completed because file is open in SQL Server
每次加载我的应用程序中的表单时,我都会通过调用此函数获取产品列表:
private void populate_products()
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;"+
"AttachDbFilename=" + AppDomain.CurrentDomain.BaseDirectory + "myDB.mdf;" +
"Integrated Security=True;Connect Timeout=30;User Instance=True";
con.Open();
try
{
SqlCommand cmd;
string cmd1 = "SELECT Name,Cost FROM Product";
cmd = new SqlCommand(cmd1, con);
SqlDataReader read = cmd.ExecuteReader();
bool ch = true;
while (read.Read())
{
list_name.Items.Add(read[0].ToString());
costs.Add(read[1].ToString());
}
read.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
con.Close();
con.Dispose();
}
调用此函数后文件无法复制。由于调用了 con.Close()
我想知道为什么文件仍在使用中。
即使从 SQL Server Management Studio 中分离数据库也不起作用。有人可以帮忙吗?
您需要清除连接池。
尝试添加
SqlConnection.ClearAllPools();
方法结束时。
另一种方法是创建一个备份,然后上传该备份而不是您装载的数据库文件。
您可以使用此 SQL 命令创建备份:
BACKUP DATABASE [DATABASENAME] TO DISK = 'c:\path\backup.bak' WITH FORMAT, INIT, STATS = 25
根据需要更改 DATABASENAME
和 c:\path\backup.bak
。然后您可以选择 bak 文件,并从那里上传。