try/catch and using statements
本问题已经有最佳答案,请猛点这里访问。
下面的两组代码产生了相同的结果,但我想知道哪一种是用try…catch块包装的正确方法。他们两个有什么区别?
已编辑:这其中哪一项将正确捕获错误,并确保即使出现异常,连接也将关闭。
一1 2 3 4 5 6 7 8 9 10 11 12 13 |
二
1 2 3 4 5 6 7 8 9 10 11 12 13 |
不同之处在于2中的sqlconnection conn对象将在catch块完成后释放。在1中,您的连接将被释放,然后您将结束在catch块中。
两者都很好,这取决于打开连接时是否要捕获错误,当然,完成连接后需要关闭连接。通常早点关门比较好。
我认为您知道异常处理。我们在catch块中编写所有代码,这些代码可能会导致应用程序出现可疑/未知行为。在这种情况下,catch块处理应用程序的可疑行为。关于你上面的两个代码块……对于第一个-由代码的任何一条语句引起的任何异常都将由catch块处理。但对于第二个例外情况,"using(sqlconnection conn=new sqlconnection(connstring))"语句不能由catch块处理,因为它在try块之外。要测试这一点,只需在sqlconnection中放置一些假连接字符串。
希望这能让你更好地理解你的场景。
区别在于:
如果您使用代码2,并且您在using语句中使用的控制无效,那么它将抛出一个异常,因为它不在try catch块中。
在代码1中,它只捕获那个异常。但在catch块中不能使用sqlconnection
using语句是表示try/catch/finally的语法快捷方式。您可以按照下面的方式修改代码,并将具有与上面示例相同的效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |