.Net正式版中的一些Bug及其解决方案

原创 2004年07月04日 20:28:00

(1)Session的问题
问题:

在我的Windows.Net 3604 + .Net Framework正式版的编程环境中,.Net下的Session总是有问题,比如我在A程序下设置了一个Session字典,这个Session将会在B程序下读取,现在的情况就是我在B程序读取这个Session时,第一次能够正常读取,但一旦页面被提交(这在Asp.Net编程中是常有的事情),Session就会马上消失,错误报告“Object is null”,使用Trace发现此Session已经不存在。

此问题排除浏览器不支持Cookie的可能,因为我读取Cookie是正常的。

解决方法:

1.使用Session的CookieLess状态,具体操作即更改web.config或machine.config文件,这样Session的传值是在URL中进行的。

2.使用Cookie,Cookie是可以正常使用的,只要浏览器没有关闭此功能。

(2)FindControl方法的问题
问题:

大家都知道所有控件集合都存在有一个FindControl方法,一般最常用的地方就是DataGrid对Item中控件的操作。这是一个很好用的方法,可以让我们迅速地找到我们想要的控件,但是他也是我遇到过的最不稳定的方法。

在Item中使用这个方法,一般不会出现什么问题,但是在DataGrid、DataList的各种事件中这个方法经常是找不到控件!!DataGrid还好一点,DataList的事件中发生的情况就惨不忍睹,100%的找不到控件!!这个控件是活生生存在的,使用Controls集合中是可以发现这个控件的。这个问题我在Beta2下就已经发现了,原以为微软会在正式版本中更正,不知道是没有人提出呢?还是没有发现,正式版中依然这样。

开始我以为FindControl这个方法没有写好,我就自个重写了这个方法,但是当我高兴地去用我自个写的方法时,发现传回来的值还是null!!!现在也就只有一个解释了,那就是.Net环境中对Control类型的支持还是不稳定的。

解决方法:

即然通过编写方法传回值的方法搞不定,那么就只有用最原始的方法,在本函数内,直接列举Controls集合中的控件,直到找到这个控件为止。

privatevoid ShowQuestion_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
//当返回值为Control类型,经常出现空值

foreach(Control cl in e.Item.Controls)
{
     if(cl.ClientID.IndexOf("OptionalTd1") != -1 || cl.ClientID.IndexOf("OptionalTd2") != -1)
     {
        foreach(Control clx in cl.Controls)
         {
            if(clx.ClientID.IndexOf("Oplbl1") != -1 || clx.ClientID.IndexOf("Oplbl2") != -1)
             {
                 if(((Label)clx).Text == "")
                {
                    ((HtmlTableCell)cl).InnerHtml = "";
                }
            }
         }
      }
}

是程序员都会对上面的方法蚩之以鼻,但是没有办法了,微软逼我走上了这条路,不然没有办法找到我要的东东。

3)OleDb的问题

问题:

大家都知道.Net平台下访问数据库有两种途径,一种是SqlClient,另一种就是OleDb,SqlClient是专为SQL Server设计的,为了保证程序的兼容性,我们还是得使用OleDb。

使用OleDb是一件令人痛苦的事情,必须有着超人的意志力和耐心,使用OLEDB写一次程序和做一次恶梦没有两样,大家真不知道那些五花八门的错误出在什么地方。先看下面的程序。

string strInsertRead = "Insert Into UnRead (Judge1_Result,Judge2_Result) ";
strInsertRead += " Values (@Judge1_Result,@Judge2_Result)";

OleDbCommand MyComm = new OleDbCommand(strInserRead,MyConn);

MyComm.Parameters.Add("@Judge1_Result",OleDbType.LongVarChar);
MyComm.Parameters["@Judge1_Result"].Value = strJudge1_Result;

MyComm.Parameters.Add("@Judge2_Result",OleDbType.LongVarChar);
MyComm.Parameters["@Judge2_Result"].Value = strJudge2_Result;

......

MyComm.ExecuteNonQuery();

执行这么一段程序,你们认为会报什么错误?(注意MyConn是OleDbConnection实例,已经打开)

报出的错误是“输入数据类型与数据库字段类型不匹配!!”?

我是想了好久?strJudge1_Result和strJudge2_Result都是string,而数据库中相应字段的为"TEXT",怎么会相配?怎么也不可能啊。没有办法,我改变字段的数据库类型试着让数据录入数据库,然后再直接从数据库中查看录入的数据是什么?

一看不知道,一看就把我气昏,进入数据库的并不是strJudge1_Result和strJudge2_Result所表示的判断的结果,而是设定的另一个变量IdCard和Template,两个毫不相干的变量怎么会搞到一起去??我使用Trace查看入库前strJudge1_Result的数据是正确的,这就说明是在入库时出现的问题,这里就是Parameters属性做的好事!

我把这个程序中的OleDB全部改成Sql,程序全部正常!我只能说OleDb的数据库操作是垃圾(也许说的有些过火),大家如果操作OleDb出现了一堆问题,你要信任自己,有些事情不是你的错,而是微软不想你用其它的数据库。

解决方法:

如果您是操作SQL Server,那么我建议您直接使用SqlClient,这样免去很多麻烦。如果非要使用OleDb来操作其它的数据库,请尽量少用Parameters属性来传递参数,而是直接写进SQL语句:

string strInsertRead = "Insert Into UnRead (Judge1_Result,Judge2_Result) ";
strInsertRead += " Values ('"+strJudge1_Result+"','"+Judge2_Result+"')";

.Net正式版中的一些Bug及其解决方案

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 03:27
  • 85

开发过程中遇到的bug以及解决办法 面试回答个人遇到

前后端分离跨域问题,前后端分离带shiro跨域问题,前后端分离ip不同机器之间跨域问题...
  • u013208953
  • u013208953
  • 2017年10月12日 15:41
  • 148

禅道BUG解决方案的各种说辞

已否决:当心,回归测试时会重开哟重复BUG:你已经提过了已修复:杀了一个程序员祭天无法重现:我这边是正常的啊延期处理:现在解决不了不修改:从此不必再纠缠转为需求:让我们回到原点待讨论:听项目经理的...
  • a_dev
  • a_dev
  • 2017年09月01日 14:55
  • 223

如何在Visual Studio.NET中正确的建立解决方案和项目

【解决方案与项目】一个解决方案可以有多个项目。一个项目可以隶属于多个解决方案。新建一个解决方案的时候,会自动建立一个和解决方案同名的项目。并同时创建两个文件,一个是.sln文件,此文件描述了解决方案的...
  • aureate820
  • aureate820
  • 2008年03月19日 17:33
  • 735

cocos2dx遇到的BUG解决方案

1.cocos2dx 图片黑边 解决
  • hj3601947
  • hj3601947
  • 2014年08月07日 16:51
  • 568

项目开发中遇到的--Bug知识整理!

====第一个Bug====》》  目前测试出现在IE7,IE6中。     问题:标签,经测试,不兼容IE7,IE6. (个人建议不要使用button标签)     解决方案:改成 /...
  • andyliulin
  • andyliulin
  • 2016年08月19日 13:31
  • 847

项目中遇到的bug及相关经验

1.在为listview添加头布局的时候,一定要把头布局设置为单独的view,头布局不要和listview在同一个布局里面,再添加给listview不然会报错   2.为imageview 设置背景...
  • DG_summer
  • DG_summer
  • 2016年04月22日 02:39
  • 559

js 中常常忽略的bug(一)

1、jquery 的 json对象结束符号问题 1、事例 $('.a').css({ top: $('#weixin').offset().top - '170', //错误写法, 最后的这个逗号...
  • dong123dddd
  • dong123dddd
  • 2016年04月04日 20:11
  • 742

bootstrap fileinut插件详解

相信很多人看到bootstrap 提供的fileinput插件,对其界面和功能的强大深感满意,唯一美中不足的就是官网提供的资料太少,网上的信息太杂太乱,想研究出来确实非常麻烦,吃力,我也是因为公司的旧...
  • qq_34332207
  • qq_34332207
  • 2017年08月24日 11:39
  • 195

Bug的基本属性

一个Bug所拥有的基本属性!
  • YanJiangbo
  • YanJiangbo
  • 2010年09月14日 12:13
  • 2746
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.Net正式版中的一些Bug及其解决方案
举报原因:
原因补充:

(最多只允许输入30个字)