关于sqltransaction的BeginTransaction()冻结,如何使用try catch来解决它?

时间:2014-03-18 12:36:14

标签: c# try-catch sqltransaction

我在C#应用程序中使用SqlTransaction transaction = connection.BeginTransaction()从SQLServer获取数据。

当没有连接到服务器(没有互联网连接)时,我遇到的问题,然后我的应用程序只是冻结并停止工作,没有异常,没有错误,只是冻结。

我尝试使用try catch来捕获错误,但即使那时应用程序只是冻结,唯一的选择是杀死应用程序。任何人都可以帮我抓住这个错误而不是冻结给我错误 - 比如Connection to server failed. Please check internet connection.

这是我的连接类代码:

public static class RequestID
{
    // Methods
    public static int GetID(string server, string database, string user, string pass)
    {
        int num = 0;
        using (SqlConnection connection = new SqlConnection(string.Format("server={0};database={1};uid={2};pwd={3};Connect Timeout=900", new object[] { server, database, user, pass })))
        {
            SqlCommand command = new SqlCommand("SELECT Value_Int FROM Param WHERE code= 'counter'");
            SqlCommand command2 = new SqlCommand("UPDATE Param SET Value_Int = Value_Int + 1 WHERE code= 'counter'");
            if (connection.State != ConnectionState.Open)
            {
                connection.Open();
            }
            try
            {
                using (SqlTransaction transaction = connection.BeginTransaction())
                    {
                        try
                        {

                            command.Connection = connection;
                            command.Transaction = transaction;
                            command2.Connection = connection;
                            command2.Transaction = transaction;
                            num = (int)command.ExecuteScalar();
                            command2.ExecuteNonQuery();
                            transaction.Commit();
                        }
                        catch (Exception)
                        {
                            transaction.Rollback();
                            throw;
                        }
                        finally
                        {
                            if (connection.State != ConnectionState.Closed)
                            {
                                connection.Close();
                            }
                        }
                    }
                }

            catch (Exception ex)
            {
                throw;
            }            


            return num;
        }
    }
}

问题在于:

using (SqlTransaction transaction = connection.BeginTransaction())

提前致谢。

P.S。应用程序工作得很好,到目前为止唯一的problam连接到互联网丢失。我无法找到解决方案......

1 个答案:

答案 0 :(得分:1)

你的问题是因为

connection.Open();

try区块之外,因此您永远不会点击catch。 将其移到try区块内。