使用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 要求已打开且可用的连接。连接的当前状态为已打开”的问题。怎么解决啊???
展开
 我来答
尘雨洛烟
2014-06-16 · TA获得超过6203个赞
知道大有可为答主
回答量:3967
采纳率:79%
帮助的人:1006万
展开全部
利用DataAdapter和DataSet不用Connection的Open,即可以不用判断SqlConnection的状态,而直接使用

SqlDataAdapter SQLda = new SqlDataAdapter(SQLstr, My_con);
DataSet My_DataSet = new DataSet();
SQLda.Fill(My_DataSet, tableName);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2014-06-16 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7778万
展开全部
不建议Connection设置成static,这样反而会降低性能,建议改成using的形式,每次用到再new。
追问
请问具体怎么写?能详细讲讲么?
追答
去掉你的My_con变量,在每个需要的地方

using(SqlConnection conn=new SqlConnection(连接字符串))
{
Try

conn.Open();
XX其他语句
conn.Close();
Catch()
xxx
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式