现在的位置: 首页 > 综合 > 正文

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

2013年10月19日 ⁄ 综合 ⁄ 共 1922字 ⁄ 字号 评论关闭

在还原数据库时,我是这样写的,先连接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();//释放资源

}

 

【上篇】
【下篇】

抱歉!评论已关闭.