中文字幕人妻中文_99精品欧美一区二区三区综合在线_精品久久久久一区二区_色月丁香_免费福利在线视频_欧美大片免费观看网址_国产伦精品一区二区三区在线播放_污污污污污污www网站免费_久久月本道色综合久久_色69激情爱久久_尹人香蕉久久99天天拍_国产美女www_亚洲国产精品无码7777一线_五月婷婷六月激情_看免费一级片_精品久久久久久成人av_在线色亚洲_女人另类性混交zo_国产精品青青在线观看爽香蕉_人人澡人人添人人爽一区二区

主頁 > 知識庫 > 在ASP.NET 2.0中操作數據之二十五:大數據量時提高分頁的效率

在ASP.NET 2.0中操作數據之二十五:大數據量時提高分頁的效率

熱門標簽:外呼電話機器人成本 百應電話機器人外呼系統 400電話辦理怎么樣 地圖標注軟件免費下載 蘇州如何辦理400電話 網絡電話外呼系統上海 聯通官網400電話辦理 西寧呼叫中心外呼系統線路商 臨沂智能電話機器人加盟

導言

  如我們在之前的教程里討論的那樣,分頁可以通過兩種方法來實現:

  1.默認分頁– 你僅僅只用選中data Web control的 智能標簽的Enable Paging ; 然而,當你瀏覽頁面的時候,雖然你看到的只是一小部分數據,ObjectDataSource 還是會每次都讀取所有數據

  2.自定義分頁– 通過只從數據庫讀取用戶需要瀏覽的那部分數據,提高了性能. 顯然這種方法需要你做更多的工作.

  默認的分頁功能非常吸引人,因為你只需要選中一個checkbox就可以完成了.但是它每次都讀取所有的數據,這種方式在大數據量或者并發用戶多的情況下就不合適.在這樣的情況下,我們必須通過自定義分頁來使系統達到更好的性能.

  自定義分頁的一個重點是要寫一個返回僅僅需要的數據的查詢語句.幸運的,Microsoft SQL Server 2005 提供了一個新的keyword,通過它我們可以寫出讀取需要的數據的查詢.在本教程里,我們將學習在GridView里如何使用Microsoft SQL Server 2005 的這個新的keyword來實現自定義分頁.自定義分頁和默認分頁的界面看起來一樣,但是當你從一頁轉到另一頁時,在效率上差了幾個數量級.

注意:自定義分頁帶來的性能提升程序取決于數據的總量和數據庫的負載.在本教程的最后我們會用數據來說明自定義分頁帶來的性能方面的好處.

第一步: 理解自定義分頁的過程

  給數據分頁的時候,頁面顯示的數據取決于請求的是哪一頁和每頁顯示多少條.比如,想象以下我們給81個product分頁,每頁顯示10條.當我們瀏覽第一頁時,我們需要的是product 1 到 product 10.當瀏覽第二頁時,我們需要的是product 11 到 product 20,以次類推.

  對于需要讀取什么數據和分頁的頁面怎么顯示,有三個相關的變量:

  1.Start Row Index – 頁面里顯示數據的第一行的索引; 這個值可以通過頁的索引乘每頁顯示的記錄的條數加1得到. 例如, 如果一頁顯示10條數據, 那么對第一頁來說(第一頁的索引為0), 第一行的索引為0 * 10 + 1, or 1; 對第二頁來說(索引為1), 第一行的索引為1 * 10 + 1, 即 11.

  2.Maximum Rows – 每頁顯示的最多記錄的條數. 之所以稱為“maximum” rows 是由于最后一頁顯示的數據可能會比page size要小. 比如, 當以每頁10條記錄來顯示81條時, 最后一頁也就是第九頁只包含一條記錄. 沒有頁面顯示的記錄條數會大于Maximum Rows 的值.

  3.Total Record Count – 顯示數據的總條數. 不需要知道頁面顯示什么數據,但是記錄總數會影響到分頁. 比如, 如果對81條product記錄分頁,每頁10條,那么總頁數為9.

  對默認分頁來說,Start Row Index是由頁索引和每頁的記錄數加1得到,Maximum Rows 就是每頁的記錄數.使用默認分頁時,不管是呈現哪頁的數據,都是要讀取全部的數據,所有每行的索引都是已知的,這樣獲取Start Row Index變的沒有價值.而且,記錄的總條數是可以通過DataTable的總條數來獲取的.

  自定義分頁只返回從Start Row Index 開始的Maximum Rows條記錄.在這里有兩個要注意的地方:

  1.我們必須把整個要分頁的數據和一個row index關聯起來,這樣才能從指定的Start Row Index 開始返回需要的數據.

  2.我們需要提供用來分頁的數據的總條數.

  在后面的兩步里我們將寫出和上面兩點相關的SQL.除此之外,我們還將在DAL和BLL里完成相應的方法.

第二步: 返回需要分頁的記錄的總條數

  在我們學習如何返回顯示頁面需要的數據之前,我們先來看看怎么獲取數據的總條數.因為在配置界面的時候需要用到這個信息.我們使用SQL的COUNT aggregate function來實現這個.比如,返回Products表的總記錄條數,我們可以用如下的語句:

SELECT COUNT(*)
FROM Products

我們在DAL里添加一個方法來返回這個信息.這個方法名為TotalNumberOfProducts() ,它會執行上面的SQL語句.

  打開App_Code/DAL 文件夾里的 Northwind.xsd .然后在設計器里右鍵點ProductsTableAdapter ,選擇Add Query.和我們在以前的教程里學習的那樣,這樣會允許我們添加一個新的DAL方法,這個方法被調用時會執行指定的SQL或存儲過程.和前面的TableAdapter 方法一樣,為這個添加一個SQL statement.

圖 1: 使用 SQL Statement

在下一個窗體我們可以指定創建哪種SQL .由于查詢只返回一個值–Products表的總記錄條數–我們選擇“SELECT which returns a singe value”.

圖 2: 使用 SELECT Statement that Returns a Single Value來配置SQL

下一步是寫SQL語句.

圖 3: 使用SELECT COUNT(*) FROM Products 語句

最后給這個方法命名為TotalNumberOfProducts.

圖 4: 將方法命名為 TotalNumberOfProducts

  點擊結束后,DAL里添加了一個TotalNumberOfProducts方法.這個方法返回的值可為空,而Count語句總是返回一個非空的值.
我們還需要在BLL中加一個方法.打開ProductsBLL類文件,添加一個TotalNumberOfProducts方法,這個方法要做的只是調用DAL的TotalNumberOfProducts方法.

public int TotalNumberOfProducts()
{
 return Adapter.TotalNumberOfProducts().GetValueOrDefault();
}

  DAL的TotalNumberOfProducts方法返回一個可空的整型,而需要ProductsBLL類的TotalNumberOfProducts方法返回一個標準的整型.調用GetValueOrDefault方法,如果可為空的整型為空,則返回默認值,0.

第三步: 返回需要的數據記錄

  下一步我們要在DAL和BLL里創建接受Start Row Index 和Maximum Rows 的方法,然后返回合適的記錄.我們首先看看需要的SQL語句.我們面臨的挑戰是需要為整個分頁的記錄分配索引,用來返回從Start Row Index 開始的Maximum Records number of records條記錄.

  如果在數據庫表里已經有一個列作為索引,那么一切會變的很簡單.我們首先會想到Products表的ProductID字段可以滿足這個條件,第一個Product的ProductID為1,第二個為2,以此類推.然而當一個product被刪除后,這個序列會留下間隔來,所以這個方法不行.

  有兩種可以把整個要分頁的數據和一個row index關聯起來的方法.

  1.使用SQL Server 2005的ROW_NUMBER() Keyword – SQL Server 2005的新特性,它可以將記錄根據一定的順序排列,每條記錄和一個等級相關 這個等級可以用來作為每條記錄的row index.

  2.使用SET ROWCOUNT – SQL Server的 SET ROWCOUNT statement 可以用來指定有多少記錄需要處理; table variables 是可以存放表格式的T-SQL 變量, 和temporary tables類似. 這個方法在Microsoft SQL Server 2005 和SQL Server 2000都可以用 (ROW_NUMBER() 方法只能在SQL Server 2005里用).

  這個思路是,為要分頁的數據創建一個table變量,這個table變量里有一個作為主健的IDENTITY列.這樣需要分頁的每條記錄在table變量里就和一個row index(通過IDENTITY列)關聯起來了.一旦table變量產生,連接數據庫表的SELECT語句就被執行,獲取需要的記錄.SET ROWCOUNT用來限制放到table變量里的記錄的數量.

  當SET ROWCOUNT的值指定為Start Row Index 加上Maximum Rows時,這個方法的效率取決于被請求的頁數.對于比較前面的頁來說– 比如開始幾頁的數據– 這種方法非常有效. 但是對接近尾部的頁來說,這種方法的效率和默認分頁時差不多.

  本教程用ROW_NUMBER()來實現自定義分頁.如果需要知道更多的關于table變量和SET ROWCOUNT的技術,請看 A More Efficient Method for Paging Through Large Result Sets.

以下語句用來使用ROW_NUMBER()將一個等級和返回的每條記錄關聯:

SELECT columnList,
 ROW_NUMBER() OVER(orderByClause)
FROM TableName

ROW_NUMBER()返回一個根據指定排序的表示每條記錄的等級的值.比如,我們可以用以下居于查看根據價格來排序(降序)的每個product的等級:

SELECT ProductName, UnitPrice,
 ROW_NUMBER() OVER(ORDER BY UnitPrice DESC) AS PriceRank
FROM Products

圖5 是在Visual Studio里運行以上代碼的結果. 注意product根據價格排序,每行有一個等級.

圖 5: 返回的記錄里每行有一個Price Rank

  注意: ROW_NUMBER() 只是 SQL Server 2005里很多排級的功能中的一種. 想了解更多的ROW_NUMBER()的討論,包括其它的排級功能,請看 Returning Ranked Results with Microsoft SQL Server 2005.

  當使用OVER從句里的ORDER BY 列名(UnitPrice)來排級時,SQL Server會對結果排序.為了提升大數據量查詢時的性能,可以為用來排序的列加上非聚集索引.更多的性能考慮參考Ranking Functions and Performance in SQL Server 2005.

  ROW_NUMBER()返回的等級信息無法直接在WHERE從句中使用.而在From后面的Select里可以返回ROW_NUMBER(),并在WHERE從句里使用.比如,下面的語句使用一個From后的Select返回ProductName,UnitPrice,和ROW_NUMBER()的結果,然后使用一個WHERE從句來返回price rank在11到20之間的product.

SELECT PriceRank, ProductName, UnitPrice
FROM
 (SELECT ProductName, UnitPrice,
 ROW_NUMBER() OVER(ORDER BY UnitPrice DESC) AS PriceRank
 FROM Products
 ) AS ProductsWithRowNumber
WHERE PriceRank BETWEEN 11 AND 20

更進一步,我們可以根據這個方法返回給定Start Row Index 和Maximum Rows 的頁的數據.

SELECT PriceRank, ProductName, UnitPrice
FROM
 (SELECT ProductName, UnitPrice,
 ROW_NUMBER() OVER(ORDER BY UnitPrice DESC) AS PriceRank
 FROM Products
 ) AS ProductsWithRowNumber
WHERE PriceRank > i>StartRowIndex/i> AND
 PriceRank = (i>StartRowIndex/i> + i>MaximumRows/i>)

  注意:我們在本教程的后面會看到, ObjectDataSource 提供的StartRowIndex是從0開始的,而ROW_NUMBER()的值從1開始.因此,WHERE從句返回會嚴格返回PriceRank大于StartRowIndex而小于StartRowIndex+MaximumRows的那些記錄.

  我們已經知道如何根據給定的Start Row Index 和Maximum Rows 用ROW_NUMBER()返回特定頁的數據.現在我們需要在DAL和BLL里實現它.

  我們首先要決定根據什么排序來分級.我們這里用product名字的字母順序.這意味著我們還不能同時實現排序的功能.在后面的教程里,我們將學習如何實現這樣的功能.

  在前面我們使用SQL statement創建DAL方法.但是TableAdapter  wizard 使用的Visual Stuido里的T-SQL 解析器不能識別帶OVER語法的ROW_NUMBER()方法.因此我們要以存儲過程來創建這個DAL方法.從view menu里選擇server explorer(Ctrl+Alt+S),展開NORTHWND.MDF 的節點.右鍵點擊存儲過程,選擇增加一個新的存儲過程(見圖6).

圖 6: 為Products分頁增加一個存儲過程

  這個存儲過程帶兩個整型的輸入參數- @startRowIndex和@maximumRows- 并用ROW_NUMBER()以ProductName字段排序,返回那些大于@startRowIndex并小于等于@startRowIndex+@maximumRows的記錄.將以下代碼加到存儲過程里,然后保存.

CREATE PROCEDURE dbo.GetProductsPaged
(
 @startRowIndex int,
 @maximumRows int
)
AS
 SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit,
 UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued,
 CategoryName, SupplierName
FROM
 (
 SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit,
 UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued,
 (SELECT CategoryName
 FROM Categories
 WHERE Categories.CategoryID = Products.CategoryID) AS CategoryName,
 (SELECT CompanyName
 FROM Suppliers
 WHERE Suppliers.SupplierID = Products.SupplierID) AS SupplierName,
 ROW_NUMBER() OVER (ORDER BY ProductName) AS RowRank
 FROM Products
 ) AS ProductsWithRowNumbers
WHERE RowRank > @startRowIndex AND RowRank = (@startRowIndex + @maximumRows)

創建完存儲過程后,花點時間測試一下.右鍵在Server Explorer 點名為GetProductsPaged的存儲過程,選擇執行.Visual Studio 會讓你輸入參數, @startRowIndex和@maximumRows(見圖7).輸入不同的值查看一下結果是什么.

圖 7: 為 @startRowIndex 和@maximumRows Parameters輸入值

  輸入參數的值后,你會看到結果.圖8的結果為兩個參數的值都為10的結果.

圖 8: 將在第二頁里顯示的數據

  完成存儲過程后,我們可以創建ProductsTableAdapter 方法了.打開Northwind.xsd ,右鍵點ProductsTableAdapter,選擇Add Query.選擇使用已經存在的存儲過程.

圖 9: 使用已經存在的存儲過程創建DAL Method

  下一步會要我們選擇要調用的存儲過程.從下拉列表里選擇GetProductsPaged .

圖10: 選擇GetProductsPaged

  下一步要選擇存儲過程返回的數據類型:表值,單一值,無值.由于GetProductsPaged 返回多條記錄,所以選擇表值.

圖 11: 為存儲過程指定返回表值

  最后給方法命名.象前面的方法一樣,選擇Fill a DataTable 和Return a DataTable,為第一個命名為FillPaged ,第二個為GetProductsPaged.

圖 12: 命名方法為FillPaged 和GetProductsPaged

  除了創建一個DAL方法返回特定頁的products外,我們需要在BLL里也這樣做.和DAL方法一樣,BLL的GetProductsPaged 方法帶兩個整型的輸入參數,分別為Start Row Index 和Maximum Rows,并返回在指定范圍內的記錄.在ProductsBLL 創建這個方法,僅僅調用DAL的GetProductsPaged 就可以了.

[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.ProductsDataTable GetProductsPaged(int startRowIndex, int maximumRows)
{
 return Adapter.GetProductsPaged(startRowIndex, maximumRows);
}

  你可以為BLL方法的參數取任何名字.但是我們馬上會看到,選擇用startRowIndex 和maximumRows 會讓我們在配置ObjectDataSource 時方便很多.
第四步: 使用自定義分頁配置ObjectDataSource

  創建完BLL和DAL的方法后,我們可以準備創建一個GridView 來使用自定義分頁了.打開PagingAndSorting 文件夾里的EfficientPaging.aspx ,添加一個GridView ,然后用ObjectDataSource 來配置它.在我們以前的教程里,我們通常使用ProductsBLL 類的GetProducts 方法來配置ObjectDataSource .然而這一次,我們使用GetProductsPaged 方法.GetProducts 會返回所有的products而GetProductsPaged 只返回特定的記錄.

圖 13: 使用ProductsBLL Class類的 GetProductsPaged方法 來配置ObjectDataSource

  我們要創建一個只讀的GridView,因此在INSERT, UPDATE, 和DELETE 標簽下拉列表里選擇(None).

  接下來ObjectDataSource 向導會讓我們選擇GetProductsPaged 方法的輸入參數startRowIndex 和maximumRows 的值.在source里選擇none.

圖 14: Sources 里選擇None

  完成ObjectDataSource 向導后,GridView 會為每個product字段創建一個BoundField 或CheckBoxField .可以隨意裁減GridView 的外觀.我這里選擇的是只顯示ProductName, CategoryName, SupplierName, QuantityPerUnit, 和UnitPrice BoundFields.在智能標簽里選擇支持分頁,GridView 和ObjectDataSource 的標記看起來應該和下面差不多:

asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
 DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" AllowPaging="True">
 Columns>
 asp:BoundField DataField="ProductName" HeaderText="Product"
 SortExpression="ProductName" />
 asp:BoundField DataField="CategoryName" HeaderText="Category"
 ReadOnly="True" SortExpression="CategoryName" />
 asp:BoundField DataField="SupplierName" HeaderText="Supplier"
 SortExpression="SupplierName" />
 asp:BoundField DataField="QuantityPerUnit" HeaderText="Qty/Unit"
 SortExpression="QuantityPerUnit" />
 asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}"
 HeaderText="Price" HtmlEncode="False" SortExpression="UnitPrice" />
 /Columns>
/asp:GridView>
asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
 OldValuesParameterFormatString="original_{0}" SelectMethod="GetProductsPaged"
 TypeName="ProductsBLL">
 SelectParameters>
 asp:Parameter Name="startRowIndex" Type="Int32" />
 asp:Parameter Name="maximumRows" Type="Int32" />
 /SelectParameters>
/asp:ObjectDataSource>

如果你通過瀏覽器瀏覽頁面,你會發現看不到GridView .

圖 15: GridView 沒有被顯示

  由于在ObjectDataSource 里的GetProductsPaged的startRowIndex和maximumRows的參數都為0,由SQL沒有返回任何的記錄因此GridView 看不到了.


我們需要將ObjectDataSource 配置成為自定義分頁來修補上面的問題.下面的步驟可以完成這個:

  1.將ObjectDataSource的 EnablePaging 屬性設為true – 這樣表示必須傳兩個參數給SelectMethod方法: 一個指定Start Row Index (StartRowIndexParameterName), 一個指定Maximum Rows (MaximumRowsParameterName).

  2.設置 ObjectDataSource的 StartRowIndexParameterName 和MaximumRowsParameterName 屬性– StartRowIndexParameterName 和MaximumRowsParameterName 屬性是傳給SelecMethod用來自定義分頁的輸入參數. 默認的參數名為startIndexRow and MaximumRows, 這就是在創建BLL里的GetProductsPaged方法時用這些給參數命名的原因 . 如果你使用了其它的參數名字–比如startIndex和maxRows–你將不得不相應的設置ObjectDataSource的StartRowIndexParameterName和MaximumRowsParameterName(startIndex和maxRows).

  3.設置 ObjectDataSource的 SelectCountMethod Property 為返回分頁記錄總數的方法的名字(TotalNumberOfProducts)–調用ProductsBLL類的TotalNumberOfProducts方法返回總的記錄數 . ObjectDataSource 需要這個信息來正確的顯示頁面.

  4.從ObjectDataSource的聲明里移除startRowIndex and maximumRows asp:Parameter> 元素的標記– 當通過向導配置 ObjectDataSource 時, Visual Studio 自動為GetProductsPaged方法的參數增加了兩個asp:Parameter> 元素. 設置EnablePaging 為true后, 這些參數會被自動傳遞;如果在聲明代碼里保留它們,那么ObjectDataSource會試圖傳遞4個參數給GetProductsPaged和2個參數給TotalNumberOfProducts .如果你沒有移除asp:Parameter> ,當瀏覽頁面的時候你會獲得一個象這樣的錯誤信息 : “ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'TotalNumberOfProducts' that has parameters: startRowIndex, maximumRows.”

做完這些改動后,ObjectDataSource的聲明代碼看起來應該和下面差不多:

asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
 OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
 SelectMethod="GetProductsPaged" EnablePaging="True"
 SelectCountMethod="TotalNumberOfProducts">
/asp:ObjectDataSource>

注意EnablePaging和SelectCountMethod屬性已經被設置了,asp:Parameter>被移除了.圖16是屬性窗口.

圖16: 使用自定義分頁配置,ObjectDataSource

  完成這些后,瀏覽頁面.你會看到10條product按照字母排序被列出來了.每次翻一頁看看.對用戶來說現在還看不出來什么差別,因為自定義分頁在大數據量的情況下效率才能顯示出來.

圖17: 根據Product的 Name排序的數據的自定義分頁

  注意:自定義分頁時,ObjectDataSource的SelectCountMethod方法返回的page count值存在GridView的view state里.其它變量–PageIndex,EditIndex,SelectedIndex,DataKeys集合等–都存在control state里.control state和GridView的EnableViewState屬性無關.由于PageCount的值在postback期間存在viewstate里,當你的頁面上有鏈到上一頁的link時,你需要開啟GridView的view state(如果沒有這個link,你可以禁用view state).

  點上一頁link會引起postback,GridView會更新PageIndex屬性.GridView會給PageIndex賦一個小于PageCount的值.如果禁用了view state,PageCount的值在postback時會丟失,PageIndex會被賦一個最大的整型值.然后GridView在根據PageSize乘PageCount來計算starting row index時會發生OverflowException異常.

執行自定義分頁和排序

  目前我們自定義分頁時使用的排序字段是在創建GetProductsPaged存儲過程時寫死的.在GridView的智能標簽里有一個Enable Sorting的checkbox,不幸的是,在前面的工作里加上排序功能僅僅只能將當前頁的記錄排序.比如,按照降序查看第一頁的數據,第一頁的product的順序回反轉.見圖18,Carnarvon Tigers 成為第一條記錄,而在它之后的71條記錄被忽略了.排序時只排了顯示在第一頁的數據.

圖18: 只有當前頁的數據被排序了

  發生這種情況的原因是調用完BLL的GetProductsPaged方法返回數據之后才排序.耳針個方法只返回特定頁的記錄.為了正確的排序,我們需要將排序表達式傳到GetProductsPaged方法里,在返回特定頁的數據前進行排序.我們將在后面的教程里完成這個功能.

執行自定義分頁和刪除

  如果你開啟GridView的刪除功能,你會發現刪除最后一頁的最后一條記錄時,GridView消失了,而不是正確的減掉PageIndex的值.在我們上面創建的GridView里開啟刪除來查看這個bug.到最后一頁(第九頁),由于我們有81條記錄,每頁顯示10條,所以你會只看到一條記錄,刪除這條記錄.

  在默認分頁時,GridView會自動跳到第八頁,這也是我們想要的結果.然而在自定義分頁里, GridView卻顯示.發生這個的原因有點超出了本教程的范圍,可以看Deleting the Last Record on the Last Page from a GridView with Custom Paging.簡單的說是因為點Delete時,GridView是按這樣的步驟工作的:   

刪除記錄.
   

  按照給定的PageIndex和PageSize獲取記錄.

  檢查PageIndex確保沒有超過數據源的頁的數量.如果是,GridView的PageIndex會自動減.

  使用第二步獲取的記錄綁定到GridView適當的頁.

  問題的根源在于第二步,當獲取顯示的記錄時,使用的PageIndex仍然是最后一頁的PageIndex.因此沒有記錄被返回.在第三步里GridView判斷出PageIndex屬性大于數據源的總頁數(因為最后一頁的最后一條數據被刪除了) 就對PageIndex減1.在第四步里GridView試圖將第二步獲取的數據作為數據源進行綁定,但是沒有任何數據,因此顯示的GridView不見了.在默認分頁里沒有這個問題是因為在第二步還是返回的所有數據.

  我們可以用兩種方法來修改這個.第一是為GridView的RowDeleted事件創建一個event handler
來判斷在刪除頁里有多少條記錄,如果只有一條,那么這條肯定是最后一條,我們需要為PageIndex減1.當然我們希望只在刪除成功后來修改PageIndex的值.我們需要用e.Exception屬性是否為空來判斷.

  這個方法之所以起作用是因為它在第一步和第二步之間修改了PageIndex的值.因此在第二步里正確的記錄會被返回.見如下代碼:

protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
 // If we just deleted the last row in the GridView, decrement the PageIndex
 if (e.Exception == null  GridView1.Rows.Count == 1)
 // we just deleted the last row
 GridView1.PageIndex = Math.Max(0, GridView1.PageIndex - 1);
}

  另外一種辦法是為ObjectDataSource的RowDeleted事件創建一個event handler,設置AffectedRows屬性為1.在第一步刪除記錄后(在第二步之前),如果一行或多行記錄被影響,GridView會更新PageIndex的值.然而ObjectDataSource 并沒有設置AffectedRows,因此這一步不會執行.我們需要在刪除操作成功的情況下手動設置AffectedRows.見下面的代碼:

protected void ObjectDataSource1_Deleted(
 object sender, ObjectDataSourceStatusEventArgs e)
{
 // If we get back a Boolean value from the DeleteProduct method and it's true,
 // then we successfully deleted the product. Set AffectedRows to 1
 if (e.ReturnValue is bool  ((bool)e.ReturnValue) == true)
 e.AffectedRows = 1;
}

  這些代碼都可以在EfficientPaging.aspx的code-behind class里找到

比較默認和自定義分頁的性能

  由于自定義分頁返回需要的數據,而默認分頁返回全部數據,因此自定義分頁比默認分頁更有效率是非常清楚的.但是性能上的提升究竟有多少?從默認分頁換成自定義分頁有什么性能上的優勢?

  很不幸,沒有一個統一的答案.性能的優勢取決于很多因素,其中最重要的是分頁記錄的數量,數據庫的負載和web server和數據庫的通信渠道.對一些小的表來說,性能的差異是可以忽略的.對成千上萬行數據的表來說,差異是非常明顯的.

  我們的一篇Custom Paging in ASP.NET 2.0 with SQL Server 2005文章包含一些對比這兩種分頁技術的性能測試,用到的表有大概50,000 條記錄.在測試中我分別測試了在SQL Server里(使用SQL Profiler)和ASP.NET頁面里(使用ASP.NET's tracing features)執行查詢的時間.注意這是在我的開發環境下單個用戶的測試結果,因此沒有模仿典型的網站的負載情況,結果也并不科學.

  Avg. Duration (sec) Reads
Default Paging – SQL Profiler 1.411 383
Custom Paging – SQL Profiler 0.002 29
Default Paging – ASP.NET Trace 2.379 N/A
Custom Paging – ASP.NET Trace 0.029 N/A

  如你所見,獲取特定頁的數據平均少了354 reads,并在恩短的時間完成.而在頁面里,自定義分頁是默認分頁所花費時間的1/100.在my article 可以看到更多的測試信息和代碼,你可以下載測試數據庫在你的環境里重新測試.

總結

  默認分頁是非常容易實現的–你僅僅只需要選擇控件上的智能標簽里的Enable Paging checkbox –但是方便帶來的是性能的損失.在默認分頁時,用戶無論請求哪個頁面,所有的數據都會被返回,即使只有一小部分被顯示出來.為了提升性能,ObjectDataSource 提供了一個可選擇的分頁功能–自定義分頁.

  自定義分頁通過只獲取需要顯示的數據來解決默認分頁的性能問題,但是使用起來更麻煩.首先,請求特定數據的查詢語句必須正確而且有效.這個可以通過很多方法來實現.在本教程里我們使用SQL Server 2005的ROW_NUMBER來實現給結果分級,然后返回等級在特定范圍內的數據.其次我們需要增加一個方法來獲取需要分頁的總記錄數.在創建完DAL和BLL方法后,我們還需要配置ObjectDataSource以使它可以獲取需要分頁的總記錄數,并將正確的Row Index 和Maximum Rows 的值傳給BLL.

  雖然使用自定義分頁需要一系列的操作,而且遠沒有默認分頁那么簡單.但是在大數據量的情況還是必須的.只顯示需要的數據,自定義分頁可以節省很多時間,減輕數據庫的負擔.

祝編程快樂!

作者簡介

Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創始人,自1998年以來一直應用 微軟Web技術。Scott是個獨立的技術咨詢顧問,培訓師,作家,最近完成了將由Sams出版社出版的新作,24小時內精通ASP.NET 2.0。他的聯系電郵為mitchell@4guysfromrolla.com,也可以通過他的博客http://scottonwriting.net/與他聯系。

您可能感興趣的文章:
  • asp.net下linkbutton的前后臺使用方法
  • asp.net button 綁定多個參數
  • 關于asp.net button按鈕的OnClick和OnClientClick事件
  • js觸發asp.net的Button的Onclick事件應用
  • ASP.NET 中 Button、LinkButton和ImageButton 三種控件的使用詳解
  • 在ASP.NET 2.0中操作數據之二十三:基于用戶對修改數據進行限制
  • 在ASP.NET 2.0中操作數據之二十四:分頁和排序報表數據
  • 在ASP.NET 2.0中操作數據之二十六:排序自定義分頁數據
  • 在ASP.NET 2.0中操作數據之二十七:創建自定義排序用戶界面
  • 在ASP.NET 2.0中操作數據之二十八:GridView里的Button

標簽:中衛 臨夏 海西 甘肅 平涼 聊城 慶陽 清遠

巨人網絡通訊聲明:本文標題《在ASP.NET 2.0中操作數據之二十五:大數據量時提高分頁的效率》,本文關鍵詞  在,ASP.NET,2.0,中,操作,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數據之二十五:大數據量時提高分頁的效率》相關的同類信息!
  • 本頁收集關于在ASP.NET 2.0中操作數據之二十五:大數據量時提高分頁的效率的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 沧州铁狮磨浆机械有限公司 | 杭州杭顺机械有限公司| 烟台山一机械有限公司| 山东泗水鑫峰面粉机械有限公司| 上海洋邦机械设备有限公司| 昆山 环保机械有限公司| 远东机械设备有限公司| 济南蓝象数控机械有限公司| 东莞市泽源机械有限公司| 卡骏机械设备有限公司| 登福机械(上海)有限公司 | 延边金科食品机械有限公司| 安徽食品机械有限公司| 曲阜润丰机械有限公司| 新源重工机械有限公司| 中阳钢铁有限公司官网| 佛山市陶瓷机械有限公司| 正扬电子机械有限公司| 山东诚铭建设机械有限公司| 东莞共荣精密机械有限公司 | 上海龙工机械有限公司| 华东机械制造有限公司| 上海红重机械装备有限公司| 广州山推机械有限公司| 上海凯机械有限公司| 青岛非凡包装机械有限公司| 河北中浩机械制造有限公司| 上海宾迪机械设备有限公司| 成都刚毅机械制造有限公司| 范县中鑫钢铁有限公司| 上海山威路桥机械有限公司| 扬州市天发试验机械有限公司 | 江苏别具匠心机械设备有限公司| 资阳 机械有限公司| 沈阳德恒机械制造有限公司 | 河南三星机械有限公司| 郑州祥龙建筑机械租赁有限公司| 浙江兴发机械有限公司| 上海法德机械设备有限公司| 上海金相机械有限公司| 陕西至信机械制造有限公司怎么样| 徐工工程机械有限公司| 贵州华泰机械设备租赁有限公司| 河南省矿山起重有限公司| 菏泽瑞康机械有限公司| 长城重型机械制造有限公司| 江阴纺织机械有限公司| 广州市机械有限公司| 潍坊华星机械有限公司| 无锡润和机械有限公司| 山东机械制造有限公司| 无锡 钢铁贸易有限公司| 上海实机械有限公司| 广州东升机械有限公司| 莆田 机械有限公司| 曲阜艾特机械有限公司| 标特福精密机械电子有限公司 | 辽宁富一机械有限公司| 上海建设路桥机械设备有限公司| 上海成套机械有限公司| 郑州年旭机械有限公司| 深圳新劲力机械有限公司| 沈阳祺盛机械有限公司| 长沙熙迈机械制造有限公司| 普瑞特机械有限公司| 常熟市机械有限公司| 泉州市劲力工程机械有限公司| 山西汉通机械有限公司| 南通江华机械有限公司| 雄雄精密机械有限公司| 广州市善友机械设备有限公司| 研精舍上海精密机械加工有限公司| 河北德林机械有限公司| 宁波瑞铭机械有限公司| 海门亿峰机械有限公司| 广州佳速精密机械有限公司| 徐州徐工随车起重机有限公司 | 兴世机械制造有限公司| 浙江制药机械有限公司| 苏州恒迈精密机械有限公司| 福州闽台机械有限公司| 郑州华郑机械有限公司| 新乡市起重机厂有限公司| 众力达机械有限公司| 东莞市包装机械有限公司| 天津富启机械有限公司| 抚顺新钢铁有限公司| 武汉包装机械有限公司| 江阴力达机械有限公司| 长春合心机械制造有限公司| 江苏大圣机械制造有限公司| 山东宝星机械有限公司| 郑州一帆机械设备有限公司| 东莞培锋精密机械有限公司| 山东山推机械有限公司| 无锡旭辉机械有限公司| 上海徽机械有限公司| 济南梓鑫机械有限公司| 山东泗水鑫峰面粉机械有限公司| 广西徐重机械有限公司| 潍坊凯德塑料机械有限公司| 徐州徐工施维英机械有限公司| 抚顺石油机械有限公司| 玉环华邦机械有限公司| 金泰机械制造有限公司| 南通海森特重工有限公司| 大庆机械制造有限公司| 众工机械机械有限公司| 佛山市三良机械设备有限公司| 郑州志乾机械设备有限公司| 苏州阔泽精密机械有限公司 | 峰峰合信钢铁有限公司| 南通奥普机械工程有限公司 | 雄雄精密机械有限公司| 上海炬钢机械制造有限公司| 宁波凯特机械有限公司| 西安新起航营销策划有限公司| 南通申通机械有限公司| 重型机械设备有限公司| 旭恒精工机械制造有限公司| 福建精密机械有限公司| 深圳新添润彩印机械设备有限公司 | 印刷包装机械有限公司| 宁波华强机械有限公司| 东莞市康机械有限公司| 无锡鹰贝机械有限公司| 上海中机械有限公司| 浙江吉隆机械有限公司| 上海杰姆博机械设备有限公司| 宁波凯特机械有限公司| 世翔精密机械制造有限公司| 东莞精密机械有限公司| 杭州引春机械有限公司| 河南 机械有限公司| 上海兴享机械工业有限公司| 上海宾迪机械设备有限公司| 中船重工海空智能装备有限公司 | 厦门精密机械有限公司| 青岛鳌福机械有限公司| 青州市远航机械设备有限公司| 固达机械制造有限公司| 北京 机械有限公司| 威海柳道机械有限公司| 天津市液压机械有限公司| 中山市机械有限公司| 佛山隆机械有限公司| 上海七洋液压机械有限公司| 浙江濠泰机械有限公司| 柳州市宏华机械有限公司| 上海鹰宏机械有限公司| 常州都可机械有限公司| 苏州博杰思达机械有限公司| 浙江飞达机械有限公司| 输送机械设备有限公司| 山东鲁工机械有限公司| 斗山工程机械有限公司| 大连港机械有限公司| 扬州三源机械有限公司| 济南快克数控机械有限公司| 江苏东禾机械有限公司| 常州国丰机械有限公司| 扬州伏尔坎机械制造有限公司 | 湖北 钢铁有限公司| 上海德托机械有限公司| 广州工程机械有限公司| 温州包装机械有限公司| 安丘机械制造有限公司| 瑞安瑞泰机械有限公司| 河北天择重型机械有限公司| 苏州市机械制造有限公司| 南通奥普机械工程有限公司| 合肥市春华起重机械有限公司| 台州市双辉机械设备有限公司| 华新机械有限公司官网| 浙江速成精密机械有限公司| 深圳机械院建筑设计有限公司| 安阳三一机械有限公司| 绍兴 机械 有限公司| 山东金成机械有限公司| 机械有限公司 法兰| 吉林小松工程机械有限公司| 木业有限公司起名大全| 中航国际钢铁贸易有限公司| 上海全众机械有限公司| 河北澳森钢铁有限公司| 福清市机械有限公司| 杭州中亚机械有限公司| 常州先电机械有限公司| 辽宁三君机械有限公司| 新疆机械设备有限公司| 恒泰机械制造有限公司| 朝阳宏达机械有限公司| 泰安越泰机械有限公司| 广州东昇机械有限公司| 宁海奇精机械有限公司| 珠海华亚机械有限公司| 常州步速者机械制造有限公司| 重庆华渝重工机电有限公司| 山西 机械设备有限公司| 广州恒星冷冻机械制造有限公司| 威海汇鑫化工机械有限公司| 郑州海特机械有限公司| 上海二和机械有限公司| 桐乡合德机械有限公司| 无锡大昌机械工业有限公司 | 上海化工机械厂有限公司| 广州合成机械有限公司| 北京恒博立华机械设备有限公司| 常州武进机械有限公司| 大连德机械有限公司| 桂林恒达矿山机械有限公司 | 广州汇亿机械有限公司| 固安嘉峰机械有限公司| 神工机械制造有限公司| 成都机械设备有限公司| 浙江明天机械有限公司| 中泰机械设备有限公司| 靖江 机械有限公司| 烟台宏兴机械有限公司| 洛阳大华重型机械有限公司| 恒兴兴业机械有限公司| 浙江安驰机械有限公司| 河北食品机械有限公司| 上海川源机械工程有限公司| 上海大恒光学精密机械有限公司| 保定锐腾机械制造有限公司| 湖北三六重工有限公司| 江阴液压机械有限公司| 东莞高恩机械有限公司| 福建机械设备有限公司| 重庆磐达机械有限公司| 绵阳新晨动力机械有限公司| 东莞市业佳精密机械有限公司| 山东翔工机械有限公司| 无锡通灵机械有限公司| 阳宏机械制造有限公司| 河北小犟牛工程机械有限公司| 沈阳精密机械有限公司| 江苏宇达机械有限公司| 南京 机械设备有限公司| 广州日森机械有限公司| 北京长空机械有限公司| 昌乐 机械 有限公司| 无锡诺美机械有限公司| 东莞市瑞辉机械制造有限公司| 长春协展机械工业有限公司| 张家港机械有限公司| 标特福精密机械电子有限公司| 三明机械制造有限公司| 江阴韩一钢铁有限公司| 无锡市康晖机械制造有限公司| 泰富重工制造有限公司| 邹平 机械有限公司| 富利源机械有限公司| 中核华兴机械化工程有限公司| 广东星联精密机械有限公司 | 洛阳美卓重工机械有限公司| 长沙晶锐机械有限公司| 山东巨明机械有限公司| 邯郸纺织机械有限公司| 德州宝鼎液压机械有限公司| 江苏合丰机械制造有限公司| 南京德丰机械有限公司| 深圳市荣德机械设备有限公司| 欧诺机械 有限公司| 唐山兴隆钢铁有限公司| 重庆海松机械有限公司| 江西欧克机械有限公司| 咸阳联合机械有限公司| 山东莱州机械有限公司| 爱克苏州机械有限公司| 无锡布勒机械制造有限公司招聘 | 临沂新天力机械有限公司| 浙江温兄机械阀业有限公司| 天津安东石油机械制造有限公司| 工程机械配件有限公司| 无锡械锐机械有限公司| 青岛科泰重工机械有限公司| 合肥市春华起重机械有限公司 | 无锡旭辉机械有限公司| 桂林正东机械制造有限公司| 恒麦食品机械有限公司| 新乡市特昌振动机械有限公司| 苏州锐豪机械制造有限公司 | 江苏华夏重工有限公司| 成都诚旭精密机械有限公司| 北京北宇机械设备有限公司| 重庆恒科机械制造有限公司 | 无锡伊诺特石化机械设备有限公司| 上海嘉迪机械有限公司| 上海起重机械有限公司| 柳州富达机械有限公司| 洛阳钢峰机械有限公司| 上海久浩机械有限公司| 宁波安德机械有限公司| 江苏大明重工有限公司| 东莞信易电热机械有限公司| 宁波星箭航天机械有限公司| 青岛宏达锻压机械有限公司| 南阳 机械制造有限公司| 山东诸城机械有限公司| 山东省机械施工有限公司| 东莞市精密机械制造有限公司| 三联传动机械有限公司| 常州天山重工机械有限公司| 顺德机械设备有限公司| 力邦 机械有限公司| 郑州同鼎机械设备有限公司| 上海嘉亿机械有限公司| 山东山推机械有限公司| 台州机械制造有限公司| 重庆阿德耐特动力机械有限公司| 杭州驰林机械有限公司| 天津润澍机械有限公司| 山推重工机械有限公司| 南通赛孚机械设备有限公司| 浙江宇丰机械有限公司| 泰州机械 有限公司| 辽宁中冶石化机械有限公司| 广东科杰机械自动化有限公司| 无锡威华机械有限公司| 南京康尼精密机械有限公司| 佛山市浩铭达机械制造有限公司| 合肥润通工程机械有限公司| 广州泓锋食品机械有限公司| 永红铸造机械有限公司| 瑞安包装机械有限公司| 中山冠力机械有限公司| 湖南博长钢铁贸易有限公司| 山西翔天钢铁有限公司| 东莞市凯格精密机械有限公司| 广东鸿业机械有限公司| 唐山市钢铁有限公司| 莱州市鲁樽机械有限公司| 大连亨益机械有限公司| 杭州沃沃机械有限公司| 上海宇减传动机械有限公司| 江苏佳粮机械有限公司| 无锡南机械有限公司| 新麦机械有限公司官网| 上海陆达包装机械制造有限公司| 济宁机械制造有限公司| 汽车销售有限公司起名| 辽阳筑路机械有限公司| 深圳市 机械有限公司| 郑州鑫宇机械制造有限公司| 东莞信易电热机械有限公司| 东莞市森佳机械有限公司| 青岛美嘉隆包装机械有限公司| 京华机械设备有限公司| 合肥逸飞包装机械有限公司| 济南真诺机械有限公司| 青岛安成食品机械有限公司| 深圳市硕方精密机械有限公司 | 上海一达机械有限公司| 宁波天竺工程机械有限公司| 无锡邦得机械有限公司| 江苏隆达机械设备有限公司| 广州永胜钢铁制品有限公司 | 黄山三佳谊华精密机械有限公司| 焦作市虹起制动器有限公司| 江苏骏马压路机械有限公司| 辽宁中冶石化机械有限公司| 连云港亚新钢铁有限公司| 东莞市和明机械有限公司| 无锡通用机械有限公司| 东莞恒力机械有限公司| 易百通机械有限公司| 浙江华邦机械有限公司| 济南东泰机械制造有限公司| 武汉 机械制造有限公司| 新晨动力机械有限公司| 东莞市高臻机械设备有限公司| 苏州传动机械有限公司| 信息技术有限公司起名| 福建申达钢铁有限公司| 新乡振动机械有限公司| 杰西博工程机械有限公司| 上海文胜机械设备有限公司| 太原 机械 有限公司| 常州华德机械有限公司| 广东科杰机械自动化有限公司| 日照兴业机械有限公司| 张市机械机械有限公司| 汤姆包装机械有限公司| 济南诺斯机械有限公司| 江苏鸡煤机械有限公司| 南兴木工机械有限公司| 广州博创机械有限公司| 上海晶程机械有限公司| 上海纳丰机械设备有限公司| 嘉兴 精密机械有限公司| 宁波立强机械有限公司| 银锐玻璃机械有限公司| 钜业机械设备有限公司| 徐州天地重型机械制造有限公司 | 扬州凯勒机械有限公司| 诸城科翔机械有限公司| 广州山推机械有限公司| 泰州机械制造有限公司| 太仓精密机械有限公司| 苏州勤堡精密机械有限公司| 上海力克机械有限公司| 冷水江钢铁有限公司| 杭州纳源传动机械有限公司| 温州新派机械有限公司| 广州泽比机械设备有限公司| 常州 机械制造有限公司| 吴江机械设备有限公司| 河北太行机械工业有限公司| 上海铁美机械有限公司| 抚顺新钢铁有限公司| 辛集市澳森钢铁有限公司| 广州铸星机械有限公司| 天津华信机械有限公司| 上海众和包装机械有限公司| 北方机械制造有限公司| 合肥华运机械制造有限公司| 河北大恒重型机械有限公司| 江苏东邦机械有限公司| 江苏贝尔机械有限公司| 南通腾中机械有限公司| 利星行机械有限公司| 无锡双益精密机械有限公司| 泉州恒泉机械有限公司| 张市机械机械有限公司| 青岛 重工 有限公司| 中山 机械有限公司| 无锡英那威特机械发展有限公司 | 上海宝闽钢铁有限公司| 南阳医疗机械有限公司| 青岛奥威机械有限公司| 江苏明珠试验机械有限公司| 威海环宇化工机械有限公司| 咸阳 机械制造有限公司| 上海盟申机械有限公司| 上海宝锻机械制造有限公司| 上海捷赛机械有限公司| 唐山龙泉机械有限公司| 安徽食品机械有限公司| 郑州年旭机械有限公司| 西安科迅机械制造有限公司| 青岛奥威机械有限公司| 江苏省南扬机械制造有限公司| 青岛义龙包装机械有限公司| 大连吉利机械配件有限公司| 杭州驰林机械有限公司| 天宇机械制造有限公司| 山东临工机械有限公司| 临沂大阳通用机械有限公司| 泉州佳升机械有限公司| 浙江鼎业机械设备有限公司| 东莞市力华机械设备有限公司| 小森机械南通有限公司| 江苏利普机械有限公司| 宣城 机械有限公司| 广东马氏机械有限公司| 吴江聚力机械有限公司| 深圳印刷机械深圳有限公司| 上海宝锻机械制造有限公司| 浙江精密机械有限公司| 佛山市南海鼎工包装机械有限公司| 青岛堡鑫机械有限公司| 龙腾机械制造有限公司| 上海映易包装机械设备有限公司| 浙江矿山机械有限公司| 浙江网路崛起有限公司| 潍坊市贝特机械有限公司| 江阴华东机械有限公司| 徐州机械设备有限公司| 成都 机械 有限公司| 宁波钢铁有限公司地址| 银三环机械有限公司| 浙江流遍机械润滑有限公司| 青岛洪珠农业机械有限公司| 山西中阳钢铁有限公司| 浙江印刷机械有限公司| 宏机械铸造有限公司| 河南 工程机械有限公司| 上海隆麦机械有限公司| 河北犀牛民用机械有限公司| 深圳新劲力机械有限公司| 咸阳经纬纺织机械有限公司| 东莞市欧西曼机械设备有限公司| 无锡秉杰机械有限公司| 湖南中旺工程机械设备有限公司| 沈阳透平机械有限公司| 台州 机械有限公司| 兴虎动力机械有限公司| 山东平安工程机械有限公司| 浙江恒齿传动机械有限公司| 青岛机械利有限公司| 青岛金诺机械有限公司| 长江液压机械有限公司| 青岛南牧机械设备有限公司| 湖北铁正机械有限公司| 河北中伟机械有限公司| 鞍山源鑫钢铁有限公司| 唐山利军机械有限公司| 山东鲁樽机械有限公司| 合肥中辰轻工机械有限公司| 山东信川机械有限公司| 象山机械制造有限公司| 江苏迪迈机械有限公司| 无锡市丰玮机械设备有限公司| 宝鸡中车时代工程机械有限公司| 深圳华盛昌机械实业有限公司 | 普惠环保机械有限公司| 上海国翔包装机械制造有限公司| 鑫源机械设备有限公司| 范县中鑫钢铁有限公司| 上海 输送机械有限公司| 新乡市威远机械有限公司| 机械密封件有限公司| 长沙众城机械有限公司| 广东新船重工有限公司| 河南世茂机械制造有限公司| 郑州水工机械有限公司| 金丰机械工业有限公司| 深圳美鹏机械设备有限公司| 大连滨海起重机吊具有限公司 | 上海长空机械有限公司| 安阳市赛尔德精工机械有限公司| 常州天山重工机械有限公司| 人和弹簧机械有限公司| 天津江天重工有限公司| 船舶机械制造有限公司| 海德机械设备有限公司| 东莞机械设备有限公司| 上海沪临重工有限公司| 宁波美亚特精密机械有限公司| 长沙宏银机械有限公司| 德州市启泰机械设备有限公司| 江苏化工机械有限公司| 青岛洪珠农业机械有限公司| 首钢长治钢铁有限公司地址| 亚龙机械制造有限公司| 河南铁山起重设备有限公司| 霸州新利钢铁有限公司| 鼎盛机械设备有限公司| 青岛美克精密机械有限公司| 佛山丰堡精密机械有限公司| 浙江恒齿传动机械有限公司| 厦门众达钢铁有限公司| 河南省平原矿山机械有限公司 | 济宁市兴旺机械制造有限公司 | 飞扬机械制造有限公司| 德国arku机械制造有限公司| 立信染整机械深圳有限公司| 山东正阳机械有限公司| 青岛科泰重工机械有限公司| 唐山港陆钢铁有限公司| 济宁高扬工程机械有限公司| 营口京华钢铁有限公司| 机械有限公司 张家港| 汽车销售有限公司起名| 富世华全能常州机械有限公司 | 东莞正扬电子机械有限公司怎么样| 山东泰瑞汽车机械电器有限公司| 江西省机械有限公司| 山东荣利中石油机械有限公司| 成都神钢建设机械有限公司| 上海昌强重工机械有限公司| 福建机械制造有限公司| 北京市政中燕工程机械制造有限公司| 锋劲威机械有限公司| 江阴西城钢铁有限公司| 洛阳洛北重工机械有限公司| 无锡东晨机械有限公司| 启东丰顺重工有限公司| 河南北工机械制造有限公司| 北京机械设备制造有限公司| 江苏鹤溪机械有限公司| 无锡包装机械有限公司| 西安柳工机械有限公司| 青岛大牧人机械有限公司| 温州设备机械有限公司| 台州通宇变速机械有限公司| 日照港达船舶重工有限公司| 昆山来运机械设备有限公司| 常州豪凯机械有限公司| 上海宏挺机械设备制造有限公司 | 荃胜精密机械有限公司| 徐州凯工机械有限公司| 上海与鑫机械有限公司| 青岛顺丰机械有限公司| 汕头市伟力塑料机械厂有限公司| 定州宏远机械有限公司| 北京余特包装机械有限公司| 青岛中华宇塑料机械有限公司| 深圳市 机械 有限公司| 克朗斯机械有限公司| 延边金科食品机械有限公司| 桂林橡胶机械有限公司| 深圳龙润彩印机械设备有限公司| 山东山特重工机械有限公司| 贵州运东机械有限公司| 萍乡萍钢安源钢铁有限公司| 杭州大精机械制造有限公司| 山东精密机械有限公司| 广西五丰机械有限公司| 长沙聚邦机械设备有限公司| 广州起重机械有限公司| 安庆恒昌机械有限公司| 中船重工环境工程有限公司怎么样| 东莞市瑞辉机械制造有限公司| 南通中船机械制造有限公司 | 山东大力机械有限公司| 安阳锻压机械工业有限公司| 河南嵩山重工有限公司| 河南矿山起重有限公司| 扬州福尔喜果蔬汁机械有限公司| 东莞瑞辉机械有限公司| 张家口中煤嘉益机械制造有限公司| 北仑旭升机械有限公司| 重庆动力机械有限公司| 国机铸锻机械有限公司| 山西天祥机械有限公司| 苏州新风机械有限公司| 重村钢模机械工业苏州有限公司| 合肥精密机械有限公司| 山东机械设备有限公司| 江西柳工机械设备有限公司| 济宁市兴旺机械制造有限公司| 五谷酿机械有限公司| 山东食品机械有限公司| 江苏明珠试验机械有限公司| 机械设备有限公司经营范围| 邢台振成机械有限公司| 南京泽创机械有限公司| 机械设备有限公司招聘| 力升机械有限公司.| 安阳新普钢铁有限公司| 山西万泽锦达机械制造有限公司| 鸿达机械制造有限公司| 广东长征机械有限公司| 常州铁本钢铁有限公司| 苏州立注机械有限公司| 上海立帆机械有限公司| 德清恒丰机械有限公司| 济宁新田工程机械有限公司| 济南冠越机械设备有限公司| 镇江宏泰钢铁有限公司| 成都成邦探矿机械设备有限公司| 安徽 机械制造有限公司| 厦门机械制造有限公司| 安徽精密机械有限公司| 经纬纺织机械有限公司| 陕西机械设备有限公司| 临海市机械有限公司| 广州市 工程机械有限公司| 廊坊 包装机械有限公司| 广州市机械制造有限公司| 山东泰山机械有限公司| 精密机械设备有限公司| 杭州海铭钢铁有限公司| 义乌联动机械有限公司| 唐山宝泰钢铁有限公司| 峰峰合信钢铁有限公司| 广东机械设备有限公司| 河北燕兴机械有限公司| 慈溪 机械 有限公司| 济宁鑫宏工矿机械设备有限公司| 昆山河海精密机械有限公司| 一帆机械设备有限公司| 无锡机械设备有限公司| 上海汉 机械有限公司| 瑞安市方泰机械有限公司| 南通路捷机械有限公司| 湖南五丰机械有限公司| 申光洗涤机械有限公司| 贵州华泰机械设备租赁有限公司| 深圳市高士达精密机械有限公司 | 南海力丰机械有限公司| 山东首钢钢铁贸易有限公司| 河北液压机械有限公司| 动力机械制造有限公司| 济宁朝阳机械有限公司| 济南精美机械设备有限公司| 浙江临海机械有限公司| 青岛金福鑫塑料机械有限公司 | 济南机械 设备有限公司| 浙江雨霖机械有限公司| 同鼎机械设备有限公司| 广州普耐柯数控机械有限公司| 江苏机械设备有限公司| 邢工机械制造有限公司| 沈阳友维机械有限公司| 唐山燕山钢铁有限公司| 普特工程机械有限公司| 广州市瑞扬机械设备有限公司| 上海重型机械有限公司| 沈阳凯力拓机械设备有限公司| 湖南民和重工机械有限公司| 诸城市安泰机械有限公司| 烟台海兰德机械设备有限公司| 青州市远航机械设备有限公司| 首钢凯西钢铁有限公司| 山东 机械制造有限公司| 丰诺植保机械制造有限公司| 山东钢铁贸易有限公司| 山东同力达智能机械有限公司| 福建晋工机械有限公司| 江阴市华夏包装机械有限公司| 苏州海骏自动化机械有限公司| 新湾机械有限公司招聘| 昆山北钜机械有限公司| 新乡市欧霖佳机械有限公司| 六安恒源机械有限公司| 苏州恒威海绵机械有限公司| 常州好迪机械有限公司| 溧阳科华机械制造有限公司 | 无锡澳美机械有限公司| 唐山九江钢铁有限公司| 上海宾迪机械设备有限公司 | 济南包装机械械有限公司| 江阴万恒机械制造有限公司| 盐城 机械 有限公司| 济宁工程机械有限公司| 无锡好麦机械有限公司| 绍兴市 机械有限公司| 唐山神州机械有限公司| 宝鸡至信机械有限公司| 临沂江鑫钢铁有限公司| 厦门全新彩钢机械有限公司| 台州万州机械有限公司| 南通江华机械有限公司| 常州儒邦机械有限公司| 比力特机械有限公司| 扬州精辉试验机械有限公司| 合肥华运机械制造有限公司| 新马木工机械有限公司| 上海海邦机械设备制造有限公司 | 重庆海松机械有限公司| 中山市信元铝门窗机械制造有限公司| 南通奥普机械工程有限公司| 合肥锦利丰机械有限公司| 玻璃设备机械有限公司| 烟台飞达机械有限公司| 昌乐 机械 有限公司| 常州包装机械有限公司| 陀曼精密机械有限公司| 四川盛和机械设备有限公司 | 湖南机械设备有限公司| 宏达机械制造有限公司| 湖南长河机械有限公司| 浙江亿鹏机械有限公司| 鑫成机械设备有限公司| 无锡通灵机械有限公司| 江苏中圣机械制造有限公司| 深圳优捷机械有限公司| 上海 精密机械有限公司| 台林机械有限公司 -| 唐山国义特种钢铁有限公司| 深圳市机械设备有限公司| 山东白龙机械有限公司| 恒联食品机械有限公司| 饶阳鸿源机械有限公司| 漳州南方机械有限公司| 上海豪德机械有限公司| 小松工程机械有限公司| 河北宏发机械有限公司| 潍坊润达机械有限公司| 佛山机械设备有限公司| 东莞市凯奥机械有限公司| 唐山兴隆钢铁有限公司| 华盛机械设备有限公司| 张家港长力机械有限公司| 承德盛丰钢铁有限公司| 矿山机械设备有限公司| 旭田包装机械有限公司| 武汉包装机械有限公司| 东莞市包装机械有限公司| 东莞市三米通用机械有限公司 | 广州市汇格机械设备有限公司| 上海起泽起重机械有限公司| 合肥润通工程机械有限公司| 鑫科木工机械有限公司| 中安重工自动化装备有限公司| 佛山创宝包装机械有限公司| 昆山大风机械有限公司| 青岛美嘉隆包装机械有限公司| 唐山港陆钢铁有限公司| 浙江金华机械有限公司| 潍坊爱地植保机械有限公司| 新麦机械有限公司官网| 合肥中通抛光机械有限公司| 江阴宗承钢铁有限公司| 东风悦达起亚汽车有限公司| 寿光 机械有限公司| 河南信联重工机械有限公司| 九江益鑫机械有限公司| 珠海三麦机械有限公司| 比力特机械有限公司| 北京雄伟京发机械加工有限公司| 上海连富机械有限公司| 浙江起重机械有限公司| 上海浩勇精密机械有限公司| 福州闽台机械有限公司| 远大机械制造有限公司| 苏州阔泽精密机械有限公司| 沈阳鸿本机械有限公司| 浙江江鑫机械有限公司| 衡阳沃力机械有限公司| 台林机械有限公司 -| 中山中炬精工机械有限公司| 苏州全彩机械设备有限公司 | 济南快克数控机械有限公司| 河南重型机械有限公司| 锦辉五金机械有限公司| 勤堡精密机械有限公司| 广州机械有限公司招聘| 安徽金丰机械有限公司| 江门市科杰机械自动化有限公司| 南京久庆机械有限公司| 无锡市光彩机械制造有限公司| 洛阳卡瑞起重设备有限公司| 山东泰山机械有限公司| 中航起落架有限公司| 上海江南制药机械有限公司| 上海紫永机械有限公司| 瑞特精密机械有限公司| 东莞市通盛机械有限公司| 厦门工业机械有限公司| 河南华北起重吊钩有限公司 | 济南岳峰机械有限公司| 永洋钢铁有限公司电话| 南通液压机械有限公司| 恒丰机械配件有限公司| 湖州机械设备有限公司| 诸城市盛和机械有限公司| 泰兴市立君机械设备有限公司| 温州天富机械有限公司| 苏州苏安起重吊装有限公司| 深圳数控机械有限公司| 潍坊华星机械有限公司| 上海宝闽钢铁有限公司| 成都海科机械设备制造有限公司| 昆山锦沪机械有限公司| 苏州江源精密机械有限公司| 太仓机械设备有限公司| 上海航发机械有限公司| 合肥中通抛光机械有限公司| 上海起泽起重机械有限公司| 山西建龙钢铁有限公司| 烟台微特机械有限公司| 广州普耐柯数控机械有限公司| 上海徽机械有限公司| 山西亚新钢铁有限公司| 宁波双马机械工业有限公司| 德阳瑞隆机械有限公司| 深圳印刷机械深圳有限公司| 承德建龙钢铁有限公司| 杭州泰尚机械有限公司| 上海东芝机械有限公司| 常州先电机械有限公司| 上海炬钢机械制造有限公司| 青州神工机械有限公司| 河南机械制造有限公司| 宁波传动机械有限公司| 浙江鼎力机械有限公司| 宁波迈拓斯数控机械有限公司| 营口金辰机械有限公司| 长沙建鑫机械有限公司| 东莞市今塑精密机械有限公司| 上海新麦机械设备制造有限公司 | 佛宇重工实业有限公司| 安庆恒昌机械有限公司| 山东瑞浩重型机械有限公司| 江阴惠尔信机械有限公司| 郑州茂祥机械有限公司| 无锡联通焊接机械有限公司 | 麻阳金湘钢铁有限公司| 杭州鼎升机械有限公司| 浙江上易机械有限公司| 建荣精密机械有限公司| 永安五金机械有限公司| 鸿兴织带机械有限公司| 海瑞克隧道机械有限公司| 山推重工机械有限公司| 兖矿大陆机械有限公司| 河南千里机械有限公司| 广东星联精密机械有限公司| 福建鼎盛钢铁有限公司| 哈尔滨 机械 有限公司| 机械租赁有限公司名字| 鼎龙机械制造有限公司| 山东机械 有限公司| 大连科信机械有限公司| 张家港同大机械有限公司| 苏州开隆机械有限公司| 浙江炜冈机械有限公司| 上海振华重工有限公司| 太仓倍加机械有限公司| 台湾正河源机械配件有限公司| 上海嘉倍德塑胶机械有限公司 | 广州包装机械有限公司| 宝鸡石油机械有限公司| 杭州建泰机械有限公司| 宁波金记机械有限公司| 河北曙光机械有限公司| 大连塑料机械有限公司| 南通福斯特机械制造有限公司| 宁波瑞铭机械有限公司| 佛山市玻璃机械有限公司| 郑州富民机械有限公司| 星火包装机械有限公司| 上海中机械有限公司| 西安凌通机械有限公司| 湖南省湘粮机械制造有限公司| 天津市钢铁贸易有限公司| 合肥福晟机械制造有限公司 | 张家口中煤嘉益机械制造有限公司| 江阴祥乐机械有限公司| 上海精密机械制造有限公司| 斗山工程机械有限公司| 广东日钢机械有限公司| 河南省中原起重机械有限公司| 宁波迪奥机械有限公司| 杭州友高精密机械有限公司| 厦门天一精密机械有限公司| 江西神起信息技术有限公司| 山东铭德机械有限公司| 上海山威路桥机械有限公司| 晋城福盛钢铁有限公司| 诸城市鼎康机械有限公司| 广州市力进食品机械有限公司| 上海力净洗涤机械制造有限公司| 青岛科泰重工机械有限公司| 泉州市恒兴工业机械有限公司| 温州欧诺机械有限公司| 华西钢铁有限公司电话| 江苏鑫林钢铁有限公司| 佰源机械有限公司欠款| 鞍山宝得钢铁有限公司招聘岗位 | 南海区机械设备有限公司| 上海春田机械有限公司| 扬州 机械 有限公司| 山东大启机械有限公司| 江苏久盛机械设备有限公司| 浙江华昌液压机械有限公司| 江苏别具匠心机械设备有限公司 | 合肥汉杰包装机械喷码有限公司 | 上海锐精密机械有限公司| 顺德富华工程机械制造有限公司 | 河南昌申钢铁有限公司| 四川宏华友信石油机械有限公司 | 杭州苹果机械有限公司| 海宁纺织机械有限公司| 常州朝康机械有限公司| 浙江富地机械有限公司| 厦门宇龙机械有限公司| 江阴戎辉机械设备制造有限公司| 鑫源机械设备有限公司| 唐河大华机械有限公司| 珠海康信精密机械有限公司| 常州化工机械有限公司| 桂林矿山机械有限公司| 山推抚起机械有限公司| 杭州雅顿过滤机械有限公司 | 佛山突破机械制造有限公司| 东莞安默琳机械制造技术有限公司| 深圳精密达机械有限公司| 济南章力机械有限公司| 聊城新泺机械有限公司| 唐山安丰钢铁有限公司| 苏州艾卓精密机械有限公司 | 江苏合丰机械制造有限公司| 长沙威沃机械制造有限公司| 科达机械制造有限公司| 启瑞机械广州有限公司| 重庆力波机械有限公司| 佛山海之力机械有限公司| 临沂盖氏机械有限公司| 河北小犟牛工程机械有限公司 | 昆山 环保机械有限公司| 山东神州机械有限公司| 江苏恒悦机械有限公司| 南通牧野机械有限公司| 苏州擎邦机械有限公司| 高博起重设备有限公司| 鑫成机械设备有限公司| 高峰机械工业有限公司| 河北展利机械有限公司| 诸城市华钢机械有限公司| 浙江西子重工机械有限公司| 注册机械设备有限公司有什么要求| 新乡振动机械有限公司| 武汉包装机械有限公司| 山矿机械设备有限公司| 江苏国天锻压机械有限公司| 重庆阿德耐特动力机械有限公司 | 杭州铁牛机械有限公司| 厦门大禾众邦机械有限公司| 江苏雨花钢铁有限公司| 罗源闽光钢铁有限公司| 新乡市长城机械有限公司| 山东大华机械有限公司| 濮阳 机械有限公司|