您的位置:程序门 -> .net技术 -> c#



c#调用存储过程恢复数据库问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


c#调用存储过程恢复数据库问题
发表于:2007-02-13 12:52:42 楼主
create   procedure   resto

@filename   varchar(50)
)
as
restore     database     jxcbook     from     disk=     @filename   with     replace    
return  

go

在程序中调用此存储过程提示,数据库正在使用。
在网上找了关闭进程的代码,报错:当前的reader没有关闭。

  public   void   closedatabaseprocesses(string   strdatabasename)

                {
                          system.configuration.connectionstringsettings   mysqlconnstring   =   system.configuration.configurationmanager.connectionstrings[ "jypx.properties.settings.jypxconnectionstring "];

        sqlconnection   conn=new   sqlconnection(mysqlconnstring.tostring());
       
        string   strsql= "select   spid   from   master..sysprocesses   where   dbid=db_id( ' "   +   strdatabasename+   " ') ";
        sqlcommand   comm=null;
        try
        {
                comm=new   sqlcommand(strsql,conn);

                conn.open();
                sqldatareader   dr=comm.EXECutereader();

                while(dr.read())
                {
                                strsql   =   "kill   "   +(dr[0].tostring   ());
                        comm=new   sqlcommand(strsql,   conn);
                                //comm=   new   sqlcommand(strsql,   conn);
                                comm.EXECutenonquery();
                }
                dr.close();
        }
        catch(exception   ex)
        {
                throw   new   exception(ex.message);
        }
        finally
        {
                if(conn!=null)
                {
                        conn.dispose();
                }
        }
  }
发表于:2007-02-13 13:17:151楼 得分:0
comm=new   sqlcommand(strsql,conn);                     <------------------1

                conn.open();
                sqldatareader   dr=comm.EXECutereader();                                                

                while(dr.read())
                {
                                strsql   =   "kill   "   +(dr[0].tostring   ());
                        comm=new   sqlcommand(strsql,   conn);                                   <--------------2
                                //comm=   new   sqlcommand(strsql,   conn);
                                comm.EXECutenonquery();
                }

晕,dr依赖于comm,在dr执行的过程中初始化comm,当然会出错,
把第2个
comm=new   sqlcommand(strsql,   conn);              
改成
comm.commandtype   =   commandtype.text;
comm.commandtext   =   strsql;
                     
发表于:2007-02-13 13:21:552楼 得分:0
同样报错,错误一样!
发表于:2007-02-13 13:27:463楼 得分:0
> 同样报错,错误一样!


                while(dr.read())
                {
                                strsql   =   "kill   "   +(dr[0].tostring   ());
                        comm=new   sqlcommand(strsql,   conn);                                   <--------------2
                                //comm=   new   sqlcommand(strsql,   conn);
                                comm.EXECutenonquery();
                }

这里面的comm.EXECutenonquery();也要去掉,因为dr依赖于comm,重新执行这条语句有问题,
解决方法是将这里面的comm换成另一个sqlcommand.

发表于:2007-02-13 13:42:004楼 得分:0
已有打开的与此命令相关联的   datareader,必须首先将它关闭。


while(dr.read())
                {
                                strsql   =   "kill   "   +(dr[0].tostring   ());
                    sqlcommand     comm1=new   sqlcommand   strsql,conn);                                                          
  comm1.EXECutenonquery();
                }
该了还是一样


发表于:2007-02-13 13:44:595楼 得分:0
若要创建   sqldatareader,必须调用   sqlcommand   对象的   EXECutereader   方法,而不要直接使用构造函数。

在使用   sqldatareader   时,关联的   sqlconnection   正忙于为   sqldatareader   服务,对   sqlconnection   无法执行任何其他操作,只能将其关闭。除非调用   sqldatareader   的   close   方法,否则会一直处于此状态。例如,在调用   close   之前,无法检索输出参数。

sqldatareader   的用户可能会看到在读取数据时另一进程或线程对结果集所做的更改。但是,确切的行为与执行时间有关。

当   sqldatareader   关闭后,只能调用   isclosed   和   recordsaffected   属性。尽管当   sqldatareader   存在时可以访问   recordsaffected   属性,但是请始终在返回   recordsaffected   的值之前调用   close,以保证返回精确的值。
------------------------------------------------
看来只能重新打开一个数据连接了,因为datareader()在执行过程中是独占一个数据连接的
发表于:2007-02-13 17:56:316楼 得分:0
up


快速检索

最新资讯
热门点击