天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

DataReader 程序性能優化

  隨著 .NET 平臺上,LINQ、ORM 框架、Dynamic Data、... 各種數據訪問技術不斷推陳出新,程序員也一直追著新技術跑,但對底層和代碼細節卻越來越難以掌控。當項目性能需要調優時,通常也只能對數據庫加入更多索引,而多數人已難以對數據訪問的代碼優化,且手寫 SQL 語句的功力似乎也持續退化中。

  大家在拼命追求新技術時,似乎已忘記微軟的 MCTS 證照,還有一門 ADO.NET 的科目 。且若有練好 ADO.NET 的基本功,當項目遇到特殊需求時,也才能手寫得出來。例如下圖 1 的「階層式下拉菜單 (Hierarchical DropDownList)」,功能很簡單,在實務上也常遇到,但單純靠 DataSource 控件難以實現,必須手寫 DataReader 來自定義細節。

  本帖的示例下載點:
  http://files.cnblogs.com/WizardWu/100216.zip

  (執行第一個示例,需要 VS 2008 或 IIS,以及 SQL Server 的 Northwind 數據庫)
  (執行第二個示例,需要 VS 2008 或 .NET 3.5,以及 SQL Server 的 AdventureWorks 數據庫)
  (執行第二個示例,需要 VS 2008 或 .NET 3.5,以及 SQL Server 的 AdventureWorks 數據庫)

   一、DataReader 的變化應用、用 Get 開頭的方法提升 DataReader 的性能 


圖 1 以 DataReader 實現的 Hierarchical DropDownList

  上圖 1 為本帖下載的第一個示例。在此 ASP.NET 示例中,我們不用 DataTable 以免速度較慢又浪費內存 (此卻為 DataSource 控件的默認選擇),改用一個 DataReader 對象,去兩個表中,各執行一句 SQL SELECT 語句,最后將兩個 result set 加載、合并到同一個 DropDownList 中。我在以前寫的 C# 代碼生成器 ,也用過類似的小技巧。

  此示例若您將前臺的 DropDownList 控件,換成微軟去年九月新推出的 ComboBox 這個可選也可輸入的 AJAX 下拉菜單控件 ,此示例的 Code-behind 一行代碼都不用改,直接就可套用至 ComboBox 上。

示例一的 Code-behind 代碼using (SqlConnection conn = new SqlConnection(strConnString))
{
    conn.Open();
    
using (SqlCommand cmd = new SqlCommand())
    {
        cmd.Connection 
= conn;

        
//利用分號「;」串連多句 SQL 語句,之后再一次丟進數據庫去執行,達成「批次(Batch)」讀取或更新數據庫的目的。
        
//此技巧亦適用于 INSERT、UPDATE、DELETE 的「批次」執行。       
        cmd.CommandText = "SELECT TOP 5 CompanyName, CustomerID FROM Customers ; SELECT LastName, EmployeeID FROM Employees";

        
using (SqlDataReader dr = cmd.ExecuteReader())
        {
            DropDownList1.Items.Add(
"客戶列表");
            
int i = 1;    //目前的數據行

            
while (dr.Read())
            {
                
//.NET typed accessor
                DropDownList1.Items.Add("  " + dr.GetString(0));    //數據庫跑循環取回的字段1 (Name),當作選項的 Text
                
//.NET typed accessor
                DropDownList1.Items[i].Value = dr.GetString(1);          //數據庫跑循環取回的字段2 (ID),當作選項的 Value

                i
++;
            }

            dr.NextResult();       
//到下一個 ResultSet

            DropDownList1.Items.Add(
"員工列表");
            i
++;

            
while (dr.Read())
            {
                
//.NET typed accessor
                DropDownList1.Items.Add("  " + dr.GetString(0));    //數據庫跑循環取回的字段1 (Name) ,當作選項的 Text
                
//Index-based accessor
                DropDownList1.Items[i].Value = dr[1].ToString();         //數據庫跑循環取回的字段2 (ID),當作選項的 Value

                
//亦可用 GetSql 開斗的方法 (Provider-specific typed accessor)
                
//DropDownList1.Items[i].Value = dr.GetSqlInt32(1).ToString();   //數據庫跑循環取回的字段2 (ID),當作選項的 Value

                i
++;
            }
        }
    }
}

NET技術DataReader 程序性能優化,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 粗好大用力好深快点漫画 | 欧美日韩另类在线观看视频 | 韩国伦理三级 | 福利片午夜 | 国产剧果冻传媒星空在线观看 | 亚洲成 人a影院青久在线观看 | 久久精品亚洲AV中文2区金莲 | 久草在线福利视频在线播放 | qvod 电影| 国精产品一区二区三区四区糖心 | 久久99国产精品蜜臀AV | 久久久97丨国产人妻熟女 | 国产精品久久久久婷婷五月色婷婷 | 金发欧美一区在线观看 | 牛牛在线精品视频 | 午夜视频在线瓜伦 | 伊久久| 俄罗斯1819y0u | 日韩欧美高清一区 | 丰满的寡妇hd高清在线观看 | 国产精品7777人妻精品冫 | 精品久久久久久久高清 | 秋霞伦理高清视频在线 | 精品国产国偷自产在线观看 | 爱穿丝袜的麻麻3d漫画acg | 国产激情视频在线观看 | hd性欧美俱乐部中文 | 日本高清免费一本视频在线观看 | 亚洲欧洲无码AV在线观看你懂的 | 中文字幕按摩 | 人人干人人看 | 拔擦拔擦8X永久华人免费播放器 | 国产这里有精品 | 久久99re6热在线播放 | 亚洲精品成人A8198A片漫画 | 性色少妇AV蜜臀人妻无码 | 女生下面免费看 | 亚洲永久精品ww47app | 亚洲成人精品久久 | 久久日本精品国产精品 | 色欲色香天天天综合 |