使用多个连接字符串时,C#应用程序冻结

时间:2014-11-08 06:16:36

标签: c# winforms sql-server-2012-express

在VS2012中的C#WINFORM构建中,我正在使用SQLSERVER 2012 我正在使用4个连接字符串,

    public SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;Database=DB1;Integrated Security=True;User Id=sa;Password=abc");
    public SqlConnection conatt = new SqlConnection("Data Source=.\\SQLEXPRESS;Database=DB2;Integrated Security=True;User Id=sa;Password=abc");
    public static SqlConnection concard = new SqlConnection("Data Source=.\\SQLEXPRESS;Database=DB3;Integrated Security=True;User Id=sa;Password=abc");

我正在打开和关闭这样的连接

 public void connect()
    {
        if (con.State == ConnectionState.Closed)
        {
            con.Open();
        }
        if (conatt.State == ConnectionState.Closed)
        {
            conatt.Open();
        }
        if (concard.State == ConnectionState.Closed)
        {
            concard.Open();
        }
    }
    public void disconnect()
    {
        if (con.State == ConnectionState.Open)
        {
            con.Close();
        }
        if (concard.State == ConnectionState.Open)
        {
            concard.Close();
        }

    }

每当我跑步时,它会冻结,一分钟后会出现错误

  

超时已过期。从池中获取连接之前经过的超时时间。

所以我用谷歌搜索并试图增加游泳池大小,但似乎没有太大的区别。

我试图在每次更新时打开和关闭连接并插入查询例如:

public bool UpdateStatusintblOrder(string orderid, bool cancel)
    {
        bool isupdated = false;
        try
        {
            SqlCommand cmd = new SqlCommand("Update tblOrder Set Cancel=@cancel Where OrderId=@orderid", con);
            cmd.Parameters.AddWithValue("@cancel", cancel);
            cmd.Parameters.AddWithValue("@orderid", orderid);
            connect();
            if (cmd.ExecuteNonQuery() > 0)
                isupdated = true;
        }
        catch (Exception ex) { MessageBox.Show(ex.Message, "Change Order", MessageBoxButtons.OK, MessageBoxIcon.Error); }
        finally { disconnect(); }
        return isupdated;
    }

但是对于select查询,我将值返回给Datatable
例如:

public DataTable taxmaster()
    {
        DataTable dt = new DataTable();
        string sqlqry = "Select * From TaxTable ";
        try
        {
            SqlCommand cmd = new SqlCommand(sqlqry, con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
        }
        catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
        return dt;
    }

这些所有查询都在Class文件中。我打电话给各自的表格。

所以我做错了什么。因为这个问题困扰了我一段时间,我还需要在同一个应用程序中再添加一个连接字符串。检查我的整个代码没有什么可以减缓过程。但是,错误表示其与连接有关的错误。

所以请告知。

由于

1 个答案:

答案 0 :(得分:0)

确保允许的连接数为0以进行无限制连接。

enter image description here

但是,我的意见是不要打开和关闭这样的连接。您应该使用using语句来处理连接,而不是创建断开连接的方法。你怎么不需要每次检查状态。

例如

using (SqlConnection cnn1 = getConnection(1))
{
   //...Do whatever want to do
   using (SqlConnection cnn2 = getConnection(2))
   {
       //...Do whatever want to do
       using (SqlConnection cnn3 = getConnection(3))
       {
           //...Do whatever want to do
           cnn3.Close();
       }
       cnn2.Close();
   }
   cnn1.Close();
}


private SqlConnection getConnection(int connID)
{
    switch(connID)
    {
        case 0:
            return new SqlConnection("first conn string");
            break;
        case 1:
            return new SqlConnection("first conn string");
            break;
        case 2:
            return new SqlConnection("first conn string");
            break;
    }

}