小台的IT备忘录  
脑子越来越不好用,只能依靠烂笔头了~

个人感觉很有可以和数据库阻塞或者内存泄露有关。

正题:

异常的特点: 
一:最大的特点是随机性。会突然报错,说不定是什么时候,有可能是你下一个点击,或者刷新一下页面之后,总之就是出现在数据库有联系的地方(查询,绑定数据控件时)。 
二:报错的多样性。一报错后,千奇百怪的错误也就喷井式爆发,如“列不属于表”,“找不到表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; 
            } 
        }

posted on 2016-06-21 16:29  taiyonghai  阅读(2126)  评论(0编辑  收藏  举报