您的位置:首页 > 数据库

sql数据库还原成功后,再次访问该数据库出现:在向服务器发送请求时发生传输级错误。

2011-09-19 16:30 459 查看
在还原数据库时,我是这样写的,先连接master数据库

因为要对指定的数据库做还原,所以要先清除该数据库的所有连接,然后再还原,还原后再次访问该数据库就会出现下面的错误:

System.Data.SqlClient.SqlException: 在向服务器发送请求时发生传输级错误。 (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。)

解决办法是:

在成功还原数据库后,调用SqlConnection.ClearAllPools();即可。

源码如下:

string fileName = this.fileUploadRestore.FileName;//获取要还原的文件

string pathname = DateTime.Now.ToString("yyyyMMddHHmmss");

string path = Server.MapPath("../databak/" + pathname + ".bak");//获取绝对路径

SqlConnection reScon = new SqlConnection("server=.;database=master;uid=sa;pwd=");//新建连接

try

{

//复制文件到服务器

this.fileUploadRestore.PostedFile.SaveAs(path);//保存文件到指定文件夹

string reSql1 = "restore database AssetsManage from disk ='" + path + "' with replace"; //还原语句

string reSql2 = "select spid from master..sysprocesses where dbid=db_id('AssetsManage')"; //强制关闭原来连接的语句

reScon.Open();//打开连接

SqlCommand reScm1 = new SqlCommand(reSql2, reScon);//执行查询找出与要还原数据库有关的所有连接

SqlDataAdapter reSDA = new SqlDataAdapter(reScm1);

DataSet reDS = new DataSet();

reSDA.Fill(reDS); //临时存储查询结果

for (int i = 0; i < reDS.Tables[0].Rows.Count; i++)//逐一关闭这些连接

{

string killSql = " kill " + reDS.Tables[0].Rows[i][0].ToString();

SqlCommand killScm = new SqlCommand(killSql, reScon);

killScm.ExecuteNonQuery();

}

SqlCommand reScm2 = new SqlCommand(reSql1, reScon);//执行还原

reScm2.ExecuteNonQuery();

MessageBox.Show(this, "数据库还原成功!");

SqlConnection.ClearAllPools();//还原成功后,加上这句话,再次访问数据库,就不会报:在向服务器发送请求时发生传输级错误。

}

catch

{

MessageBox.Show(this, "还原数据库失败,请确保清除数据库所有连接,再进行数据库还原!");

}

finally

{

File.Delete(path);//删除文件

reScon.Close();//关闭本次连接

reScon.Dispose();//释放资源

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐