asp.net 因为数据库正在使用的解决方法
程序员文章站
2022-03-06 11:28:14
这个问题困惑我好长的时间,在网上搜,也没完全的解决方案,不是过于简单,就是乱说,有的论坛上还没人回答这个问题.今天我彻底解决这个问题,并在c#里测试完全通过.现在把他写出来...
这个问题困惑我好长的时间,在网上搜,也没完全的解决方案,不是过于简单,就是乱说,有的论坛上还没人回答这个问题.今天我彻底解决这个问题,并在c#里测试完全通过.现在把他写出来,希望对朋友们有帮助(如要转载,记得给我版权哦.嘿嘿!!!).以下信息是综合网上的资料和我的实际问题,整理出来的.
备份:
在备份按钮里写:
protected void button1_click(object sender, eventargs e)
{
string path = "e:\\maz数据库备份\\" + menu+ ".bak";
if (file.exists(path))
{
file.delete(path);//注意,这个步骤很重要,如果重复,在备份的数据,就会变成,
//你刚开始的数据,所以每次都要先删除.
}
if (!file.exists(path))
{
filestream fs = file.create(path);
fs.close();
}
string backupstr="backup database test to disk='"+path+"';";
sqlconnection con = new sqlconnection("server=localhost;database=menu;uid=sa;pwd=sa;");
sqlcommand cmd = new sqlcommand(backupstr, con);
try
{
con.open();
cmd.executenonquery();
messagebox.show("备份成功!");
connection.close();
}
catch (exception ex)
{
string stringerror = ex.tostring();
messagebox.show("备份失败!");
connection.close();
}
}
还原:
在还原按钮里写:
protected void button2_click(object sender, eventargs e)
{
string path = "e:\\maz数据库备份\\" + menu+ ".bak";
string connectionstringtest = "server=localhost ;database=master;uid=sa;pwd=sa";
sqlconnection connection = new sqlconnection(connectionstringtest);
string backupstr = "restore database menu from disk='" + path + "';";
try
{
string sql = "exec killspid '" + menu+ "'";//这个很关键,要不然就出现题目上的错误了
sqlcommand cmd = new sqlcommand(sql, connection);
connection.open();
cmd.executenonquery();
cmd = new sqlcommand(backupstr, connection);
cmd.executenonquery();
messagebox.show("恢复成功!");
connection.close();
}
catch (exception ex)
{
string stringerror = ex.tostring();
messagebox.show("恢复失败!");
connection.close();
}
}
存储过程 killspid
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status <>-1
begin
exec('kill') +@spid
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
备份:
在备份按钮里写:
复制代码 代码如下:
protected void button1_click(object sender, eventargs e)
{
string path = "e:\\maz数据库备份\\" + menu+ ".bak";
if (file.exists(path))
{
file.delete(path);//注意,这个步骤很重要,如果重复,在备份的数据,就会变成,
//你刚开始的数据,所以每次都要先删除.
}
if (!file.exists(path))
{
filestream fs = file.create(path);
fs.close();
}
string backupstr="backup database test to disk='"+path+"';";
sqlconnection con = new sqlconnection("server=localhost;database=menu;uid=sa;pwd=sa;");
sqlcommand cmd = new sqlcommand(backupstr, con);
try
{
con.open();
cmd.executenonquery();
messagebox.show("备份成功!");
connection.close();
}
catch (exception ex)
{
string stringerror = ex.tostring();
messagebox.show("备份失败!");
connection.close();
}
}
还原:
在还原按钮里写:
复制代码 代码如下:
protected void button2_click(object sender, eventargs e)
{
string path = "e:\\maz数据库备份\\" + menu+ ".bak";
string connectionstringtest = "server=localhost ;database=master;uid=sa;pwd=sa";
sqlconnection connection = new sqlconnection(connectionstringtest);
string backupstr = "restore database menu from disk='" + path + "';";
try
{
string sql = "exec killspid '" + menu+ "'";//这个很关键,要不然就出现题目上的错误了
sqlcommand cmd = new sqlcommand(sql, connection);
connection.open();
cmd.executenonquery();
cmd = new sqlcommand(backupstr, connection);
cmd.executenonquery();
messagebox.show("恢复成功!");
connection.close();
}
catch (exception ex)
{
string stringerror = ex.tostring();
messagebox.show("恢复失败!");
connection.close();
}
}
存储过程 killspid
复制代码 代码如下:
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status <>-1
begin
exec('kill') +@spid
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
推荐阅读
-
SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法
-
win2008 r2因为使用安全设置软件导致权限丢失无法打开磁盘的解决方法
-
sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法
-
ASP.NET使用X509Certificate2出现一系列问题的解决方法
-
ASP.NET使用X509Certificate2出现一系列问题的解决方法
-
使用R的程序包提示我们无法使用怎么回事?因为计算机丢失jvm.dll(解决方法)
-
SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法
-
使用SQL Server 2008远程链接时SQL数据库不成功的解决方法
-
如何强制删除或恢复SQLServer正在使用的数据库
-
如何恢复数据库备份到一个已存在的正在使用的数据库上