人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

.Net正式版中的一些Bug及其處理方案

.Net正式版中的一些Bug及其處理方案

更新時間:2022-06-27 文章作者:未知 信息來源:網絡 閱讀次數:

.Net正式版中的一些Bug及其解決方案 (原創)
作者: 飛刀 
(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是正常的。

解決方法:

使用Session的CookieLess狀態,具體操作即更改web.config或machine.config文件,這樣Session的傳值是在URL中進行的。
使用Cookie,Cookie是可以正常使用的,只要瀏覽器沒有關閉此功能。
(2)FindControl方法的問題

問題:

大家都知道所有控件集合都存在有一個FindControl方法,一般最常用的地方就是DataGrid對Item中控件的操作。這是一個很好用的方法,可以讓我們迅速地找到我們想要的控件,但是他也是我遇到過的最不穩定的方法。

在Item中使用這個方法,一般不會出現什么問題,但是在DataGrid、DataList的各種事件中這個方法經常是找不到控件!!DataGrid還好一點,DataList的事件中發生的情況就慘不忍睹,100%的找不到控件!!這個控件是活生生存在的,使用Controls集合中是可以發現這個控件的。這個問題我在Beta2下就已經發現了,原以為微軟會在正式版本中更正,不知道是沒有人提出呢?還是沒有發現,正式版中依然這樣。

開始我以為FindControl這個方法沒有寫好,我就自個重寫了這個方法,但是當我高興地去用我自個寫的方法時,發現傳回來的值還是null!!!現在也就只有一個解釋了,那就是.Net環境中對Control類型的支持還是不穩定的。

解決方法:

即然通過編寫方法傳回值的方法搞不定,那么就只有用最原始的方法,在本函數內,直接列舉Controls集合中的控件,直到找到這個控件為止。

private void 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+"')";

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 古蔺县| 温宿县| 图木舒克市| 广汉市| 教育| 屏东县| 航空| 台南市| 乌兰察布市| 南汇区| 乌拉特前旗| 信丰县| 准格尔旗| 尼玛县| 含山县| 平凉市| 内江市| 孙吴县| 鄯善县| 三明市| 延长县| 阜宁县| 平原县| 南宫市| 明溪县| 浦东新区| 杭州市| 邳州市| 高阳县| 乳源| 二手房| 五寨县| 巴楚县| 惠水县| 万山特区| 武陟县| 望奎县| 隆子县| 双峰县| 原阳县| 阳高县|