使用C#循环反复多次连接SQL数据库,出现“内部连接致命错误”的问题,怎么解决?
连接数据库的方法getcon():publicstaticSqlConnectiongetcon(){if(My_con==null){My_con=newSqlConn...
连接数据库的方法getcon():
public static SqlConnection getcon()
{
if (My_con == null)
{
My_con = new SqlConnection(M_str_sqlcon);
My_con.Open();
}
else if (My_con.State == ConnectionState.Broken)
{
My_con.Close();
My_con.Open();
}
else if (My_con.State == ConnectionState.Closed)
My_con.Open();
return My_con;
}
建立dataset的方法getDataSet:
public DataSet getDataSet(string SQLstr, string tableName)
{
while (My_con.State != ConnectionState.Open)
getcon();
SqlDataAdapter SQLda = new SqlDataAdapter(SQLstr, My_con);
DataSet My_DataSet = new DataSet();
SQLda.Fill(My_DataSet, tableName);
My_DataSet.Dispose();
//con_close();
return My_DataSet;
}
我在计时器timer中多次反复调用getDataSet方法,开始时一切正常,大约40多分钟后出现“内部连接致命错误”的问题;如果每次连接SQL数据库后都关闭连接,则运行十分中后会出现“ExecuteReader 要求已打开且可用的连接。连接的当前状态为已打开”的问题。怎么解决啊??? 展开
public static SqlConnection getcon()
{
if (My_con == null)
{
My_con = new SqlConnection(M_str_sqlcon);
My_con.Open();
}
else if (My_con.State == ConnectionState.Broken)
{
My_con.Close();
My_con.Open();
}
else if (My_con.State == ConnectionState.Closed)
My_con.Open();
return My_con;
}
建立dataset的方法getDataSet:
public DataSet getDataSet(string SQLstr, string tableName)
{
while (My_con.State != ConnectionState.Open)
getcon();
SqlDataAdapter SQLda = new SqlDataAdapter(SQLstr, My_con);
DataSet My_DataSet = new DataSet();
SQLda.Fill(My_DataSet, tableName);
My_DataSet.Dispose();
//con_close();
return My_DataSet;
}
我在计时器timer中多次反复调用getDataSet方法,开始时一切正常,大约40多分钟后出现“内部连接致命错误”的问题;如果每次连接SQL数据库后都关闭连接,则运行十分中后会出现“ExecuteReader 要求已打开且可用的连接。连接的当前状态为已打开”的问题。怎么解决啊??? 展开
展开全部
利用DataAdapter和DataSet不用Connection的Open,即可以不用判断SqlConnection的状态,而直接使用
SqlDataAdapter SQLda = new SqlDataAdapter(SQLstr, My_con);
DataSet My_DataSet = new DataSet();
SQLda.Fill(My_DataSet, tableName);
SqlDataAdapter SQLda = new SqlDataAdapter(SQLstr, My_con);
DataSet My_DataSet = new DataSet();
SQLda.Fill(My_DataSet, tableName);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不建议Connection设置成static,这样反而会降低性能,建议改成using的形式,每次用到再new。
追问
请问具体怎么写?能详细讲讲么?
追答
去掉你的My_con变量,在每个需要的地方
using(SqlConnection conn=new SqlConnection(连接字符串))
{
Try
conn.Open();
XX其他语句
conn.Close();
Catch()
xxx
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询