在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文件中。我打电话给各自的表格。
所以我做错了什么。因为这个问题困扰了我一段时间,我还需要在同一个应用程序中再添加一个连接字符串。检查我的整个代码没有什么可以减缓过程。但是,错误表示其与连接有关的错误。
所以请告知。
由于
答案 0 :(得分:0)
确保允许的连接数为0
以进行无限制连接。
但是,我的意见是不要打开和关闭这样的连接。您应该使用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;
}
}