法师塔

MySqlDataAdapter.Fill() +4

doyle posted @ 2007年6月20日 23:16 in MySql with tags mysql asp.net , 1481 阅读

今天遇到的事情,就是这个方法...

MySqlDataAdapter这个类在MySql.Data.MySqlClient名子空间下
看名字就知道大概的用法了(如果你用asp.netmssql写过东西的话)

然后,问题出在MySql有个LIMIT X,Y 可以限制select从挑选出来的集合中第X条到第X+Y-1条记录——拿这个来做分页还真是爽快啊...
MySql.Data.MySqlClient.MySqlDataAdapterFill()方法中有一条是

public int Fill(DataSet dataSet, int startRecord, int maxRecords, string srcTable);

顾名思义...想,这个就是替代LIMIT用的吧...于是苦果的种子埋下了...

自从这样写了以后,持续4天过去了,一切正常,本地正常,服务器端正常...

可视第五天下午,突然...我不能添加新留言了(嗯...在做个留言板的功能)
具体的说,是执行了插入数据,但是当这条新数据插入后再查询,就会出现问题...Fill方法死也不会返回了...但是服务器那边就没有问题...
直到最后appDomain自动释放了,Fill也没有返回,结果直接导致抛出appDomain卸载失败异常...

猛翻google无果,也一直想不明白,只以为是MySql犯傻...折腾了很久,未果.

次日再战,终于查到一条05年的bug记录,说Fill方法在怎样怎样的情况下会不返回...
虽然这么老的bug不可能再被我遇到,但嫌疑对象基本从MySql本身转移到了MySqlDataAdapter
当时的嫌疑犯是MySql本身,MySqlDataAdapter,和那条我自己写的SqlString
但是,这条SqlString在之前几天,以及在服务器上一切都良好啊...
而之前,也又把MySql给重装了一遍...

那么就只剩下MySqlDataAdapter了.

于是,给SqlString添加上LIMIT,改用Fill的另一个版本,没有startRecordmaxRecords

于是程序又再一次正常了...

但是...我还是没有明白为什么会之前好好的,突然坏掉,以及,只是本地坏掉,服务器那边怎么就没事...
以及...会坏掉的更本原因何在...

只希望不要再这样来一次了...


* 登录
*

simple_captcha.jpg
(输入验证码)