第一个:资源释放        using (SqlConnection con = new SqlConnection())
        {
            SqlCommand cmd = new SqlCommand();
            Prepare(con, cmd, cmdType, cmdText, cmdParms);
            return cmd.ExecuteNonQuery();
        }
采用using结构,当内部引起异常时,是否会自动关闭连接释放资源?第二个:抛出异常
我把一切关于数据库的操作做成了一个WebService,在程序里通过调用WebService进行相关数据操作。有一个存储过程,如下RAISERROR('Rais Error1', 16, 1) WITH NOWAIT --引发一个异常这个异常引发后会反馈给WebService,那会不会继续反馈给所调用的程序?

解决方案 »

  1.   

    1.既然用了using,连接出现异常就说明没有成功连接,就不存在关闭连接释放资源。
    2.返回给调用程序的错误应该就是提示WebService异常。没有测试,不一定正确。根据以前的经验看应该是这样。逍遥兄早~
      

  2.   

    1.那我重写
    2.是这样的结构:数据库——WebServic——应用程序。由数据库执行SQL语句引发的异常,应用程序能捕捉到吗?
      

  3.   

    1.那打开连接后,执行SQL语句时引发了异常,会自动关闭吗?
    2.嗯
      

  4.   

    1.会关闭,出了using范围会执行dispose()方法,里面会关闭
      

  5.   

    (1)按照MSDN上的说法,using里抛出异常之后是可以释放资源的:
    http://msdn.microsoft.com/zh-cn/library/yh598w02(VS.80).aspx
    里面有using语句的本质 解释
    (2)我觉得要看WebService里怎么处理了,如果WebService处理了,应该不会继续反馈给所调用的程序,否则是要提交给所调用的程序的。请楼主有时间测试!
      

  6.   

    引发异常后会出using范围吗?不是就停在那不走啦
      

  7.   


    1这个我觉得不会,using的机制应该是针对Connection吧,难道using里出现任何异常他都会关掉连接吗?这个真没研究过, 不过你在执行SQL语句外面套个try catch,catch里如果捕获到异常就自己写行代码把连接关掉就完了呗
      

  8.   

    以把using语句看做1个try-finally语句的变种,当内部引起异常时,会自动关闭连接释放资源.
      

  9.   

    根据8L,9L所说那就是说using里出了任何异常终止程序的话也算是出了using范围会执行dispose()方法,会关闭。
    没有研究就没有发言权,我就不乱说误导LZ了,我觉得有时间LZ还是自己测试一下的好。
      

  10.   

    测试完成1.当using内部引发异常时,连接会关闭。(细节:第一次做测试时没有自动关闭,但后来都关闭的。)2.当由SqlServer自身引发错误时,应用程序会捕捉到错误,但Messege超级长。如果在WebService使用try...catch...之后会减少Messege长度。结贴