国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

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

2024-07-10 13:02:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  • 本文來(lái)源于網(wǎng)頁(yè)設(shè)計(jì)愛(ài)好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問(wèn)。
  • .net正式版中的一些bug及其解決方案 (原創(chuàng))
    作者: 飛刀     
    (1)session的問(wèn)題

    問(wèn)題:

    在我的windows.net 3604 + .net framework正式版的編程環(huán)境中,.net下的session總是有問(wèn)題,比如我在a程序下設(shè)置了一個(gè)session字典,這個(gè)session將會(huì)在b程序下讀取,現(xiàn)在的情況就是我在b程序讀取這個(gè)session時(shí),第一次能夠正常讀取,但一旦頁(yè)面被提交(這在asp.net編程中是常有的事情),session就會(huì)馬上消失,錯(cuò)誤報(bào)告“object is null”,使用trace發(fā)現(xiàn)此session已經(jīng)不存在。

    此問(wèn)題排除瀏覽器不支持cookie的可能,因?yàn)槲易x取cookie是正常的。

    解決方法:

    使用session的cookieless狀態(tài),具體操作即更改web.config或machine.config文件,這樣session的傳值是在url中進(jìn)行的。
    使用cookie,cookie是可以正常使用的,只要瀏覽器沒(méi)有關(guān)閉此功能。
    (2)findcontrol方法的問(wèn)題

    問(wèn)題:

    大家都知道所有控件集合都存在有一個(gè)findcontrol方法,一般最常用的地方就是datagrid對(duì)item中控件的操作。這是一個(gè)很好用的方法,可以讓我們迅速地找到我們想要的控件,但是他也是我遇到過(guò)的最不穩(wěn)定的方法。

    在item中使用這個(gè)方法,一般不會(huì)出現(xiàn)什么問(wèn)題,但是在datagrid、datalist的各種事件中這個(gè)方法經(jīng)常是找不到控件!!datagrid還好一點(diǎn),datalist的事件中發(fā)生的情況就慘不忍睹,100%的找不到控件!!這個(gè)控件是活生生存在的,使用controls集合中是可以發(fā)現(xiàn)這個(gè)控件的。這個(gè)問(wèn)題我在beta2下就已經(jīng)發(fā)現(xiàn)了,原以為微軟會(huì)在正式版本中更正,不知道是沒(méi)有人提出呢?還是沒(méi)有發(fā)現(xiàn),正式版中依然這樣。

    開始我以為findcontrol這個(gè)方法沒(méi)有寫好,我就自個(gè)重寫了這個(gè)方法,但是當(dāng)我高興地去用我自個(gè)寫的方法時(shí),發(fā)現(xiàn)傳回來(lái)的值還是null!!!現(xiàn)在也就只有一個(gè)解釋了,那就是.net環(huán)境中對(duì)control類型的支持還是不穩(wěn)定的。

    解決方法:

    即然通過(guò)編寫方法傳回值的方法搞不定,那么就只有用最原始的方法,在本函數(shù)內(nèi),直接列舉controls集合中的控件,直到找到這個(gè)控件為止。

    private void showquestion_itemdatabound(object sender, system.web.ui.webcontrols.datalistitemeventargs e)
    {
    //當(dāng)返回值為control類型,經(jīng)常出現(xiàn)空值

    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 = "";
                    }
                }
             }
          }
    }

    是程序員都會(huì)對(duì)上面的方法蚩之以鼻,但是沒(méi)有辦法了,微軟逼我走上了這條路,不然沒(méi)有辦法找到我要的東東。

    (3)oledb的問(wèn)題

    問(wèn)題:

    大家都知道.net平臺(tái)下訪問(wèn)數(shù)據(jù)庫(kù)有兩種途徑,一種是sqlclient,另一種就是oledb,sqlclient是專為sql server設(shè)計(jì)的,為了保證程序的兼容性,我們還是得使用oledb。

    使用oledb是一件令人痛苦的事情,必須有著超人的意志力和耐心,使用oledb寫一次程序和做一次惡夢(mèng)沒(méi)有兩樣,大家真不知道那些五花八門的錯(cuò)誤出在什么地方。先看下面的程序。

    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();

    執(zhí)行這么一段程序,你們認(rèn)為會(huì)報(bào)什么錯(cuò)誤?(注意myconn是oledbconnection實(shí)例,已經(jīng)打開)

    報(bào)出的錯(cuò)誤是“輸入數(shù)據(jù)類型與數(shù)據(jù)庫(kù)字段類型不匹配!!”?

    我是想了好久?strjudge1_result和strjudge2_result都是string,而數(shù)據(jù)庫(kù)中相應(yīng)字段的為"text",怎么會(huì)相配?怎么也不可能啊。沒(méi)有辦法,我改變字段的數(shù)據(jù)庫(kù)類型試著讓數(shù)據(jù)錄入數(shù)據(jù)庫(kù),然后再直接從數(shù)據(jù)庫(kù)中查看錄入的數(shù)據(jù)是什么?

    一看不知道,一看就把我氣昏,進(jìn)入數(shù)據(jù)庫(kù)的并不是strjudge1_result和strjudge2_result所表示的判斷的結(jié)果,而是設(shè)定的另一個(gè)變量idcard和template,兩個(gè)毫不相干的變量怎么會(huì)搞到一起去??我使用trace查看入庫(kù)前strjudge1_result的數(shù)據(jù)是正確的,這就說(shuō)明是在入庫(kù)時(shí)出現(xiàn)的問(wèn)題,這里就是parameters屬性做的好事!

    我把這個(gè)程序中的oledb全部改成sql,程序全部正常!我只能說(shuō)oledb的數(shù)據(jù)庫(kù)操作是垃圾(也許說(shuō)的有些過(guò)火),大家如果操作oledb出現(xiàn)了一堆問(wèn)題,你要信任自己,有些事情不是你的錯(cuò),而是微軟不想你用其它的數(shù)據(jù)庫(kù)。

    解決方法:

    如果您是操作sql server,那么我建議您直接使用sqlclient,這樣免去很多麻煩。如果非要使用oledb來(lái)操作其它的數(shù)據(jù)庫(kù),請(qǐng)盡量少用parameters屬性來(lái)傳遞參數(shù),而是直接寫進(jìn)sql語(yǔ)句:

    string strinsertread = "insert into unread (judge1_result,judge2_result) ";
    strinsertread += " values ('"+strjudge1_result+"','"+judge2_result+"')";


    發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 锦州市| 九江市| 呼图壁县| 威信县| 景泰县| 东海县| 黄冈市| 深州市| 林周县| 荆州市| 江油市| 铁岭县| 新河县| 鲁甸县| 夏邑县| 五河县| 冷水江市| 潢川县| 特克斯县| 黄冈市| 浦城县| 巴彦县| 南丹县| 忻州市| 阿尔山市| 绥芬河市| 通海县| 寿宁县| 博客| 孟村| 桐乡市| 金昌市| 萨嘎县| 新乡市| 黎川县| 神木县| 应城市| 涞水县| 佛山市| 化德县| 那坡县|