个人感觉很有可以和数据库阻塞或者内存泄露有关。
正题:
异常的特点:
一:最大的特点是随机性。会突然报错,说不定是什么时候,有可能是你下一个点击,或者刷新一下页面之后,总之就是出现在数据库有联系的地方(查询,绑定数据控件时)。
二:报错的多样性。一报错后,千奇百怪的错误也就喷井式爆发,如“列不属于表”,“找不到表0”,“数据转换不成功”等,各种各样都有,但都是与数据库的数据有关。
三:持续时间比较短。很多页面报错后,刷新几次,或者是等一阵,又正常了,又可以使用了,但可能下一个点击,刷新,就又报错了
四:越多人使用,网络情况越差,就越频繁。我的系统在公司内部几个开发人员测试没有问题,但上线后,客户公司很多人用,就不断有这个错。而且,有几天网络比较好,就没有发生这错,我以为换了dbhelper已经搞掂了,但这几天又继续报错。
1、
法名: getList 异常信息: 列“productId”不属于表 Table
lz我公司的网站不知道出现了多少次了,我以前也发过这样的帖子,不过那个时候我解决了
原因是全局变量的问题,因为我的sql是拼接的,而在一些方法中设置了那个全局变量的值,
然后第二次再调用其他方法,因为字段被设置过,所以错了,最后我把那个全局变量全部改成局部变量
就不会错了。
NND,过一段时间又出现这样的问题,以为还是那个全局变量的问题,但是整个项目都没有全局变量了
现在还没有解决这个问题,但从我的日志记录来看,1、我的项目的数据层都有记录异常日志,在页面Global.aspx里也有记录异常日志。而且数据层都是记录日志后抛出的,所以正常情况数据层出现错误的话
那么就会有2个日志记录,一个是数据层的,该日志有记录参数的值,另一个是页面的,该日志直接记录异常信息,但是每次都只有页面的日志,所以怀疑与数据绑定有关
2、
SqlConnection 不要用全局或静态或单例模式 , 否则会出现不同进程进下共用connection的情况 , 特别是在web环境下 , 这将导致使用者获取的dataset不正确 , 从而引发上面我提出的问题 , 解决的方法是在需要做数据连接的地方new connection来使用 , 用后close , 这样就可以避免出现类似于 “xxxxx不属于表 Table ”等一系列的问题了。。。
3、
这个问题可能是由于并发的时候取的数据出了问题,很难找出问题,所以,
最后在这个经常容易出错的地方,加上try catch,然后在catch中加日志,把这个表的所有字段列出来,看到底是什么东西.
4、
到数据库里看看日志,出错就会影响应用池,要重新启动
是否是并发操作问题
5、
呵呵,应该是并发问题导致数据超时
你可以将数据库的连接池放大一些。
6、
建议LZ将上线的东西加上一个日志,因为上线的东西有时错误是很难跟踪的,那你看到的问题又不全面。。
之前因为上线后网站出现问题,老大要原因,我说我也不知道,后来他才让我加日志跟踪。
这样以后出现问题都可以有据可查。我现在使用的是log4net
7、
先确定下,你报的这些错不属于连接超时所带来的问题。这些问题归根结底的原因还是在与你代码的问题。
1.加日志记录记录SQL语句和连接字符串
2.查是否有垃圾数据
3.检查代码。(数据库连接,你的DBHELPER,查询语句)
8、
数据库ADO.NET的连接操作不正确,我也遇到了这样的问题,原来的DBHelp类中用的是静态的一个Connection对象,现在不采用静态的,在使用时全部重新创建对象,问题解决。
代码如下:
public static int ExecuteCommand(string safeSql)
{
using (SqlConnection Connection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
int result = cmd.ExecuteNonQuery();
Connection.Close();
return result;
}
}