我有一个网站查询as / 400数据库以获取某些信息,包括登录用户的一小部分信息。
因此,只要用户登录到新会话,就会查询as / 400.
我收到零星的A communication error occurred
服务器错误报告,特别是当人们在周末登录时。
如果您点击f5并刷新页面,则错误会清除,一切正常。
有谁知道我收到此错误的原因?
我在想,因为f5清除了错误,我可以简单地重试任何因此而失败的查询,但我不想在没有更深入了解情况的情况下开始。
我已经浏览了IBM的用户文档以及相当多的谷歌搜索,并且没有提出任何建议。
编辑
与Windows {12}的IBM.Data.DB2.iSeries
驱动程序建立连接。
连接代码类似于:
public DataSet RetrieveDataSet(string sql)
{
DataSet ds = new DataSet();
iDB2Connection con = new iDB2Connection();
iDB2DataAdapter da = null;
try
{
con.ConnectionString = ConnectionString;
con.Open();
da = new iDB2DataAdapter(sql, con);
da.Fill(ds);
}
catch (Exception ex)//yes i am aware this should not be catching the base exception
{
LogError("AS400Connection", "RetrieveAll", ex.Message, sql, ex.StackTrace, con.JobName.Trim());
throw;
}
finally
{
if (con.State == ConnectionState.Open)
con.Close();
if(da!=null)
da.Dispose();
con.Dispose();
ds.Dispose();
}
return ds;
}
da.Fill(...)
行正在抛出通信错误异常。
答案 0 :(得分:3)
我最后只是编写了一小段代码,在每个关键部分之前尝试了一个小查询,因此如果作业结束,它只会杀死该查询而不是整个应用程序。
编辑 -
“CheckConnectionOnOpen”连接字符串参数必不可少,但作为驱动程序的一部分。
答案 1 :(得分:1)
一种非常常见的情况是网络路由器和防火墙在长时间空闲时会静默关闭TCP / IP连接。
我猜这正是这里发生的事情。
答案 2 :(得分:0)
答案 3 :(得分:0)
在我的情况下,我收到此错误是因为我的密码已过期并且我已更改它,但我忘记更新我的.config文件中的连接字符串。因此,在尝试使用旧密码登录三次(程序化)后,我的用户被禁用。
当我尝试使用查询工具访问服务器时,我意识到这一点,它告诉我即使我输入了新密码,我的用户也被禁用了。这是我的不好,但错误信息并不是真正的信息......