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

主頁 > 知識庫 > 在ASP.NET 2.0中操作數(shù)據(jù)之六十五:在TableAdapters中創(chuàng)建新的存儲過程

在ASP.NET 2.0中操作數(shù)據(jù)之六十五:在TableAdapters中創(chuàng)建新的存儲過程

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

導言:

  本教程的Data Access Layer (DAL)使用的是類型化的數(shù)據(jù)集(Typed DataSets).就像我們在第一章《創(chuàng)建一個數(shù)據(jù)訪問層》里探討的一樣,該類型化的數(shù)據(jù)集由強類型的DataTable和TableAdapter構(gòu)成。DataTable描繪的是系統(tǒng)里的邏輯實體而TableAdapter引用相關數(shù)據(jù)庫執(zhí)行數(shù)據(jù)訪問,包括對DataTable填充數(shù)據(jù)、執(zhí)行返回標量數(shù)據(jù)(scalar data)的請求、添加,更新,刪除數(shù)據(jù)庫里的記錄等.

  TableAdapter執(zhí)行的SQL命令要么是某個特定的SQL statements,比如SELECT columnList FROM TableName;要么是存儲過程.本教程前面部分的TableAdapter使用的是SQL statements.不過很多開發(fā)者和數(shù)據(jù)庫管理員基于安全、便于維護等方面的考慮,偏愛使用存儲過程;不過也有的人出于靈活性的考慮偏愛使用SQL statement.就我自己而言,我也偏向于存儲過程.在前面的文章,出于簡化的目的我選用的是SQL statements.

  當定義一個新TableAdapter或添加新方法時,使用TableAdapter的設置向?qū)В覀兛梢院苋菀椎膭?chuàng)建新的或使用現(xiàn)有的存儲過程.在本文,我們將考察如何使用設置向?qū)ё詣拥纳a(chǎn)存儲過程。在下一章我們考察如何設置TableAdapter的方法使用現(xiàn)有的或手動創(chuàng)建存儲過程.

  注意:關于討論到底使用存儲過程還是使用SQL statements的問題,可參考Rob Howard的博客文章《Don't Use Stored Procedures Yet?》(http://weblogs.asp.net/rhoward/archive/2003/11/17/38095.aspx)和Frans Bouma的博客文章《Stored Procedures are Bad, M'Kay?》(http://weblogs.asp.net/fboue/2003/11/18/38178.aspx

存儲過程基礎

  一個存儲過程由一系列的T-SQL statement組成,當調(diào)用該存儲過程時就執(zhí)行這些T-SQL statement.存儲過程可以接受0到多個輸入?yún)?shù),返回標量值、輸出參數(shù),或最常見的返回SELECT查詢值.

  注意:存儲過程Stored procedures也經(jīng)常引用為“sprocs” or “SPs”.

  可以使用T-SQL statement語句CREATE PROCEDURE來創(chuàng)建存儲過程.比如下面的T-SQL腳本創(chuàng)建了一個名為GetProductsByCategoryID的存儲過程,它有一個名為 @CategoryID的參數(shù),并且將表Products里與CategoryID值相吻合的那條記錄的ProductID, ProductName, UnitPrice,以及Discontinued值返回.

CREATE PROCEDURE GetProductsByCategoryID
(
 @CategoryID int
)
AS

SELECT ProductID, ProductName, UnitPrice, Discontinued
FROM Products
WHERE CategoryID = @CategoryID

創(chuàng)建后,我們可以用下面的代碼調(diào)用它:

EXEC GetProductsByCategory categoryID

  注意:在下篇文章我們將在Visual Studio IDE集成環(huán)境里創(chuàng)建存儲過程.不過在本文,我們將用TableAdapter向?qū)碜詣觿?chuàng)建存儲過程.

  除了返回數(shù)據(jù)外,我們還可以在一個事務里用存儲過程執(zhí)行多條數(shù)據(jù)庫命令.比如,假如有一個名為DeleteCategory的存儲過程,其包含一個輸入?yún)?shù)@CategoryID,并執(zhí)行2個DELETE statemets,第一個是刪除相關的products,第二個是刪除category。存儲過程里面的多個statements并不是自動的封裝在一個事務里的.我們應添加額外的T-SQL commands以確保存儲過程里的多條數(shù)據(jù)庫命令當成原子操作處理.我們將在后面的內(nèi)容考察如何用事務來封裝存儲過程的命令.

  當在體系的某個層使用存儲過程時,Data Access Layer的方法將調(diào)用某個具體的存儲過程而不是發(fā)出一個SQL statement命令.這樣一來我們可以發(fā)現(xiàn)、分析發(fā)出的查詢命令.并可以更清楚的看到數(shù)據(jù)庫是如何使用的.有關存儲過程基本原理的更多信息,可參考本文結(jié)束部分的延伸閱讀.

第一步:創(chuàng)建數(shù)據(jù)訪問層高級場景的Web頁面

在開始之前,讓我們花點時間創(chuàng)建本文及后面幾篇文章要用到的頁面。新建一個名為AdvancedDAL的文件夾,然后添加如下的ASP.NET頁面,記得使用母版頁Site.master:

Default.aspx
NewSprocs.aspx
ExistingSprocs.aspx
JOINs.aspx
AddingColumns.aspx
ComputedColumns.aspx
EncryptingConfigSections.aspx
ManagedFunctionsAndSprocs.aspx


圖1:添加相關的頁面

像其它文件夾一樣,Default.aspx頁面將列出本部分的內(nèi)容,記得SectionLevelTutorialListing.ascx用戶控件提供了該功能。因此,將其從解決資源管理器里拖放到Default.aspx頁面.


圖2:將SectionLevelTutorialListing.ascx用戶控件拖到Default.aspx頁面

最后,將這些頁面添加到Web.sitemap文件里。特別的,把下面的代碼放在“Working with Batched Data”

siteMapNode>標簽后面:

siteMapNode url="~/AdvancedDAL/Default.aspx"
 title="Advanced DAL Scenarios"
 description="Explore a number of advanced Data Access Layer scenarios.">
 
 siteMapNode url="~/AdvancedDAL/NewSprocs.aspx"
 title="Creating New Stored Procedures for TableAdapters"
 description="Learn how to have the TableAdapter wizard automatically
 create and use stored procedures." />
 siteMapNode url="~/AdvancedDAL/ExistingSprocs.aspx"
 title="Using Existing Stored Procedures for TableAdapters"
 description="See how to plug existing stored procedures into a
 TableAdapter." />
 siteMapNode url="~/AdvancedDAL/JOINs.aspx"
 title="Returning Data Using JOINs"
 description="Learn how to augment your DataTables to work with data
 returned from multiple tables via a JOIN query." />
 siteMapNode url="~/AdvancedDAL/AddingColumns.aspx"
 title="Adding DataColumns to a DataTable"
 description="Master adding new columns to an existing DataTable." />
 siteMapNode url="~/AdvancedDAL/ComputedColumns.aspx"
 title="Working with Computed Columns"
 description="Explore how to work with computed columns when using
 Typed DataSets." />
 siteMapNode url="~/AdvancedDAL/EncryptingConfigSections.aspx"
 title="Protected Connection Strings in Web.config"
 description="Protect your connection string information in
 Web.config using encryption." />
 siteMapNode url="~/AdvancedDAL/ManagedFunctionsAndSprocs.aspx"
 title="Creating Managed SQL Functions and Stored Procedures"
 description="See how to create SQL functions and stored procedures
 using managed code." />
/siteMapNode>

更新Web.sitemap文件后,花點時間在瀏覽器里查看,左邊的菜單將包括本部分的內(nèi)容.


圖3:網(wǎng)站地圖現(xiàn)在包含了不部分的頁面

第二步:設置TableAdapter創(chuàng)建新的存儲過程

  我們在~/App_Code/DAL文件夾里創(chuàng)建一個類型化的DataSet,名稱為NorthwindWithSprocs.xsd.由于我們在以前的教程里已經(jīng)詳細探討了創(chuàng)建細節(jié),因此我們這里一筆帶過,如果你想知道詳細的創(chuàng)建過程請參閱前面的第1章《創(chuàng)建一個數(shù)據(jù)訪問層》在DAL文件夾上右擊鼠標選“添加新項”,選DataSet模板,如圖4所示.


圖4:新建一個名為NorthwindWithSprocs.xsd的數(shù)據(jù)集

  這樣將會創(chuàng)建一個新的類型化的DataSet,打開設計器,創(chuàng)建一個新的TableAdapter,展開TableAdapter設置向?qū)?向?qū)У牡谝徊绞亲屛覀冞x擇要連接的數(shù)據(jù)庫.在下拉列表里有一個連接到Northwind數(shù)據(jù)庫的連接字符串,選中它,再點下一步。接下來的界面讓我們選擇TableAdapter以哪種方式訪問數(shù)據(jù)庫.在以前的教程里我們選擇的是“Use SQL statements”,不過在本文我們選第二項:“Create new stored procedures”,點下一步.


圖5:設置TableAdpater創(chuàng)建新的存儲過程

接下來,我們要指定主查詢(main query).我們將創(chuàng)建一個存儲過程來包含SELECT查詢.
使用下面的SELECT查詢:

SELECT ProductID, ProductName, SupplierID, CategoryID,
 QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
 ReorderLevel, Discontinued
FROM Products


圖6:鍵入SELECT查詢

  注意:在名為Northwind的數(shù)據(jù)集里的ProductsTableAdapter的主查詢與上面本文定義的主查詢有所不同。那個主查詢還返回了每個產(chǎn)品的category名稱和company名稱.不過在后面的文章我們將對本文的TableAdapter添加這些相關的代碼.再點“Advanced Options”按鈕.我們可以指定是否讓向?qū)門ableAdapter自動生成insert, update和delete statements;是否使用開發(fā)式并發(fā)操作(optimistic concurrency);是否完成inserts 和 update操作后刷新數(shù)據(jù)表.在默認情況下,自動選中“Generate Insert, Update and Delete statements”選項。另外,本文不用選擇“Use optimistic concurrency”項.當選擇自動創(chuàng)建存儲過程時,“Refresh the data table”項將被忽略掉.不管是否選中該項,最終的insert 和update存儲過程都會檢索剛添加或剛更新(just-inserted or just-updated record)的記錄,我們將在第三步看到.


圖7:選中“Generate Insert, Update and Delete statements”項

  注意:當選中“Use optimistic concurrency”項的時候,向?qū)赪HERE語句里添加額外的條件,當其它列的值發(fā)生改動的話,將阻止數(shù)據(jù)更新.關于使用TableAdapter內(nèi)置的optimistic concurrency功能請參閱第21章《實現(xiàn)開放式并發(fā)》輸入SELECT主查詢并選取“Generate Insert, Update and Delete statements”項后,點下一步,接下來的界面,如圖8所示,讓我們?yōu)閟electing, inserting, updating, 和deleting數(shù)據(jù)的存儲過程命名.將這些存儲過程的名字改為Products_Select, Products_Insert, Products_Update, 和Products_Delete.


圖8:為存儲過程重命名

向?qū)?chuàng)建了4個存儲過程,點“Preview SQL Script”按鈕,你可以在Preview SQL Script 對話框里將腳本保存在一個文件里或復制到剪貼板.


圖9:預覽生成的存儲過程

  對存儲過程重命名后,點下一步,對TableAdapter相應的方法命名.就像使用SQL statements一樣,我們可以創(chuàng)建方法來填充一個現(xiàn)有的DataTable或返回一個新的DataTable;我們也一個指定TableAdapter是否采用DB-Direct模式來插入、更新、刪除記錄.全選這3項,只不過將Return a DataTable方法重命名為GetProducts,如圖10所示:


圖10:將方法重命名為Fill 和GetProducts

點Next總覽向?qū)?zhí)行的步驟.點Finish按鈕完成設置.一旦向?qū)ЫY(jié)束后,將返回DataSet設計器,它此時將包括ProductsDataTable.


圖11:DataSet設計器將顯示剛剛添加的ProductsDataTable

第三步:考察剛剛創(chuàng)建的存儲過程

  我們在第二步里用向?qū)?chuàng)建了選擇、插入、更新、刪除數(shù)據(jù)的存儲過程.這些存儲過程可以通過Visual Studio查看或修改.打開服務器資源管理器,點到數(shù)據(jù)庫的存儲過程文件夾。如圖12所示,Northwind數(shù)據(jù)庫包含了4個新的存儲過程,Products_Delete, Products_Insert, Products_Select, and Products_Update.


圖12:可以在Stored Procedures文件夾里找到我們創(chuàng)建的4個存儲過程

  注意:如果你看不到服務器資源管理器,點“View”菜單,選Server Explorer項.如果你無法找到新創(chuàng)建的存儲過程,右擊Stored Procedures文件夾,選“刷新”.

  要查看或修改某個存儲過程,在服務器資源管理器里雙擊其名字或右擊該存儲過程,選”打開“。如13顯示的是打開Products_Delete存儲過程的畫面.


圖13:可以在Visual Studio里打開并修改存儲過程

Products_Delete和Products_Select存儲過程的內(nèi)容很好理解。比如下面的代碼構(gòu)成了Products_Insert存儲過程.

ALTER PROCEDURE dbo.Products_Insert
(
 @ProductName nvarchar(40),
 @SupplierID int,
 @CategoryID int,
 @QuantityPerUnit nvarchar(20),
 @UnitPrice money,
 @UnitsInStock smallint,
 @UnitsOnOrder smallint,
 @ReorderLevel smallint,
 @Discontinued bit
)
AS
 SET NOCOUNT OFF;
INSERT INTO [Products] ([ProductName], [SupplierID], [CategoryID], [QuantityPerUnit],
 [UnitPrice], [UnitsInStock], [UnitsOnOrder], [ReorderLevel], [Discontinued])
VALUES (@ProductName, @SupplierID, @CategoryID, @QuantityPerUnit, @UnitPrice,
 @UnitsInStock, @UnitsOnOrder, @ReorderLevel, @Discontinued);
 
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice,
 UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued
FROM Products
WHERE (ProductID = SCOPE_IDENTITY())

  在TableAdapter向?qū)Ю锒x的SELECT查詢返回Products表里的列,這些列又作為存儲過程的輸入?yún)?shù)并運用到INSERT statement中.緊接著的是一個SELECT查詢,返回Products表里最新添加的記錄的各列的值(包括ProductID)。當使用Batch Update模式添加一個新記錄時,刷新功能是很有用的。因為它將最新添加的ProductRow instances實例的ProductID屬性賦值為數(shù)據(jù)庫指派的自增值.

  下面的代碼說明了該功能.代碼創(chuàng)建了基于NorthwindWithSprocs數(shù)據(jù)集的ProductsTableAdapter以及ProductsDataTable。要向數(shù)據(jù)庫添加一個新的產(chǎn)品,我們要創(chuàng)建一個ProductsRow instance實例,對其賦值,并調(diào)用TableAdapter的Update方法,再傳遞給ProductsDataTable.在內(nèi)部,TableAdapter的Update方法遍歷傳遞給DataTable的所有ProductsRow instance實例(在本例,只有一個。因為我們只添加了一個產(chǎn)品),并執(zhí)行相應的insert, update, 或delete命令。此時,執(zhí)行Products_Insert存儲過程,其向Products表添加一條新記錄,并返回該記錄的詳細信息,然后更新ProductsRow instance實例的ProductID值。Update方法完成后,我們就可以通過ProductsRow的ProductID屬性訪問新添加記錄的ProductID值了.

// Create the ProductsTableAdapter and ProductsDataTable
NorthwindWithSprocsTableAdapters.ProductsTableAdapter productsAPI =
 new NorthwindWithSprocsTableAdapters.ProductsTableAdapter();
NorthwindWithSprocs.ProductsDataTable products =
 new NorthwindWithSprocs.ProductsDataTable();

// Create a new ProductsRow instance and set its properties
NorthwindWithSprocs.ProductsRow product = products.NewProductsRow();
product.ProductName = "New Product";
product.CategoryID = 1; // Beverages
product.Discontinued = false;

// Add the ProductsRow instance to the DataTable
products.AddProductsRow(product);

// Update the DataTable using the Batch Update pattern
productsAPI.Update(products);

// At this point, we can determine the value of the newly-added record's ProductID
int newlyAddedProductIDValue = product.ProductID;

類似的,Products_Update存儲過程的UPDATE statement后面也包含一個SELECT statement,如下:

ALTER PROCEDURE dbo.Products_Update
(
 @ProductName nvarchar(40),
 @SupplierID int,
 @CategoryID int,
 @QuantityPerUnit nvarchar(20),
 @UnitPrice money,
 @UnitsInStock smallint,
 @UnitsOnOrder smallint,
 @ReorderLevel smallint,
 @Discontinued bit,
 @Original_ProductID int,
 @ProductID int
)
AS
 SET NOCOUNT OFF;
UPDATE [Products]
SET [ProductName] = @ProductName, [SupplierID] = @SupplierID,
 [CategoryID] = @CategoryID, [QuantityPerUnit] = @QuantityPerUnit,
 [UnitPrice] = @UnitPrice, [UnitsInStock] = @UnitsInStock,
 [UnitsOnOrder] = @UnitsOnOrder, [ReorderLevel] = @ReorderLevel,
 [Discontinued] = @Discontinued
WHERE (([ProductID] = @Original_ProductID));
 
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit,
 UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued
FROM Products
WHERE (ProductID = @ProductID)

  我們注意到該存儲過程有2個關于ProductID的參數(shù),即@Original_ProductID 和@ProductID,這樣以來我們就可以對主鍵值進行改動了.舉個例子:有一個employee(雇員)數(shù)據(jù)庫,每條employee記錄都用雇員的社保號碼作為其主鍵值.要想更改某條記錄的社保號碼,必須提供新的號碼以及原始號碼.不過對Products表來說用不著,因為列ProductID是一個唯一標識列(IDENTITY column),不應對其更改.實際上,Products_Update存儲過程里的UPDATE statement并沒有包含ProductID列,因此,如果在UPDATE statement的WHERE字句里使用@Original_ProductID的話,顯得多此一舉,而應該使用@ProductID參數(shù).當更新某個存儲過程的參數(shù)時,TableAdapter里所有那些調(diào)用該存儲過程方法都應該進行更新.

第四步:修改存儲過程的參數(shù)并更新TableAdapter

  由于@Original_ProductID參數(shù)是多余的,讓我們將其從Products_Update存儲過程里完全清除.打開Products_Update存儲過程,刪除@Original_ProductID參數(shù),在UPDATE statement的WHERE字句里將@Original_ProductID改為@ProductID. 完成上述修改后,該存儲過程里的T-SQL看起來應該和下面的差不多:

ALTER PROCEDURE dbo.Products_Update
(
 @ProductName nvarchar(40),
 @SupplierID int,
 @CategoryID int,
 @QuantityPerUnit nvarchar(20),
 @UnitPrice money,
 @UnitsInStock smallint,
 @UnitsOnOrder smallint,
 @ReorderLevel smallint,
 @Discontinued bit,
 @ProductID int
)
AS
 SET NOCOUNT OFF;
UPDATE [Products] SET [ProductName] = @ProductName, [SupplierID] = @SupplierID,
 [CategoryID] = @CategoryID, [QuantityPerUnit] = @QuantityPerUnit,
 [UnitPrice] = @UnitPrice, [UnitsInStock] = @UnitsInStock,
 [UnitsOnOrder] = @UnitsOnOrder, [ReorderLevel] = @ReorderLevel,
 [Discontinued] = @Discontinued
WHERE (([ProductID] = @ProductID));
 
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit,
 UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued
FROM Products
WHERE (ProductID = @ProductID)

  按Ctrl+S或點工具欄里的“保存”圖標,保存更改.此時,Products_Update存儲過程不會執(zhí)行@Original_ProductID參數(shù),但TableAdapter仍然會傳遞該參數(shù).要想查看TableAdapter傳遞給Products_Update存儲過程的參數(shù),你可以在設計器里選中TableAdapter,轉(zhuǎn)到屬性窗口,點更新命令的參數(shù)集(UpdateCommand'sParameters collection)里的橢圓型區(qū)域,這樣將轉(zhuǎn)到Parameters Collection Editor對話框,如圖14所示:


圖14:對話框里列出了傳遞給Products_Update存儲過程的參數(shù)

要刪除參數(shù),只需選中它,再點Remove按鈕.

  要刷新參數(shù)的話,你也可以在設計器里選中TableAdapter,點右鍵選“設置”,這將會開啟TableAdapter設置向?qū)В谐隽擞糜趕elect, insert, updat和delete的存儲過程,并列出了這些存儲過程的輸入?yún)?shù).如果你在Update下拉列表里選Products_Update的話,你可以看到該存儲過程包含的輸入?yún)?shù)里已經(jīng)沒有包含@Original_ProductID了(見圖15),點Finish將對TableAdapter使用的參數(shù)集自動更新.

 
圖15:你可以通過使用TableAdapter的設置向?qū)硭⑿聟?shù)集

第五步:添加額外的TableAdapter方法

  我們在第二步說過,當創(chuàng)建一個新的TableAdapter時,很容易自動地生成相應的存儲過程,同樣我們也可以向TableAdapter添加額外的方法.作為演示,讓我們向ProductsTableAdapter添加一個方法GetProductByProductID(productID),該方法將一個ProductID作為輸入?yún)?shù),并返回該產(chǎn)品的詳細信息.在ProductsTableAdapter上點擊右鍵,選擇“添加查詢”.


圖16:向TableAdapter添加新查詢

  這將開啟TableAdapter查詢設置向?qū)АJ紫龋驅(qū)⒃儐栆院畏N方式訪問數(shù)據(jù)庫,我們將創(chuàng)建一個新的存儲過程,因此選“Create a new stored procedure”,再點Next.


圖17:選中“Create a new stored procedure”項

  接下來,向?qū)г儐栁覀儓?zhí)行哪種查詢,是返回一系列行?一個標量值?又或者執(zhí)行UPDATE, INSERT,或 DELETE statement.由于GetProductByProductID(productID)方法將返回一行,我們選擇“SELECT which returns row”項,再點Next.


圖18:選擇“SELECT which returns row” 項

  接下來的界面將展示TableAdapter的主查詢,其僅僅列出了存儲過程的名字(也就是dbo.Products_Select).將其刪除,替換為如下的SELECT statement,它返回某個具體產(chǎn)品的所有列.

SELECT ProductID, ProductName, SupplierID, CategoryID,
 QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
 ReorderLevel, Discontinued
FROM Products
WHERE ProductID = @ProductID


圖19:將存儲過程的名字替換為一個SELECT查詢.

  接下來要對創(chuàng)建的存儲過程命名,輸入Products_SelectByProductID,點Next.


圖20:將新存儲過程命名為Products_SelectByProductID

  最后一步將要我們對自動生成的名字重新命名,并指定是否使用Fill a DataTable模式、是否使用Return a DataTable模式,抑或這2種模式都采用.就本文而言,都選中這2項并將方法重命名為FillByProductID 和 GetProductByProductID.點Next,再點Finish完成設置向?qū)?

 

圖21:將TableAdapter的方法重命名為FillByProductID 和 GetProductByProductID

  完成向?qū)Ш螅琓ableAdapter將包含一個新的可用方法——GetProductByProductID(productID),當調(diào)用該方法時,將執(zhí)行我們剛剛創(chuàng)建的Products_SelectByProductID存儲過程.花點時間在服務器資源管理器里查看該存儲過程,點Stored Procedures文件夾,并打開Products_SelectByProductID(如果你沒看到它,在Stored Procedures文件夾上右擊鼠標,選“刷新”).

  請注意,SelectByProductID存儲過程將@ProductID作為輸入?yún)?shù),并執(zhí)行我們在向?qū)Ю镙斎氲腟ELECT Statement,如下:

ALTER PROCEDURE dbo.Products_SelectByProductID
(
 @ProductID int
)
AS
 SET NOCOUNT ON;

SELECT ProductID, ProductName, SupplierID, CategoryID,
 QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
 ReorderLevel, Discontinued
FROM Products
WHERE ProductID = @ProductID

第六步:創(chuàng)建一個業(yè)務邏輯層類

在我們打算從表現(xiàn)層訪問產(chǎn)品前,我們首先需要為新添加的數(shù)據(jù)集創(chuàng)建一個BLL class,在~/App_Code/BLL文件夾里創(chuàng)建一個ProductsBLLWithSprocs.cs文件,如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using NorthwindWithSprocsTableAdapters;

[System.ComponentModel.DataObject]
public class ProductsBLLWithSprocs
{
 private ProductsTableAdapter _productsAdapter = null;
 protected ProductsTableAdapter Adapter
 {
 get
 {
  if (_productsAdapter == null)
  _productsAdapter = new ProductsTableAdapter();

  return _productsAdapter;
 }
 }

 [System.ComponentModel.DataObjectMethodAttribute
 (System.ComponentModel.DataObjectMethodType.Select, true)]
 public NorthwindWithSprocs.ProductsDataTable GetProducts()
 {
 return Adapter.GetProducts();
 }


 [System.ComponentModel.DataObjectMethodAttribute
 (System.ComponentModel.DataObjectMethodType.Select, false)]
 public NorthwindWithSprocs.ProductsDataTable GetProductByProductID(int productID)
 {
 return Adapter.GetProductByProductID(productID);
 }


 [System.ComponentModel.DataObjectMethodAttribute
 (System.ComponentModel.DataObjectMethodType.Insert, true)]
 public bool AddProduct
 (string productName, int? supplierID, int? categoryID,
  string quantityPerUnit, decimal? unitPrice, short? unitsInStock,
  short? unitsOnOrder, short? reorderLevel, bool discontinued)
 {
 // Create a new ProductRow instance
 NorthwindWithSprocs.ProductsDataTable products =
  new NorthwindWithSprocs.ProductsDataTable();
 NorthwindWithSprocs.ProductsRow product = products.NewProductsRow();

 product.ProductName = productName;
 if (supplierID == null)
  product.SetSupplierIDNull();
 else
  product.SupplierID = supplierID.Value;
 if (categoryID == null)
  product.SetCategoryIDNull();
 else
  product.CategoryID = categoryID.Value;
 if (quantityPerUnit == null)
  product.SetQuantityPerUnitNull();
 else
  product.QuantityPerUnit = quantityPerUnit;
 if (unitPrice == null)
  product.SetUnitPriceNull();
 else
  product.UnitPrice = unitPrice.Value;
 if (unitsInStock == null)
  product.SetUnitsInStockNull();
 else
  product.UnitsInStock = unitsInStock.Value;
 if (unitsOnOrder == null)
  product.SetUnitsOnOrderNull();
 else
  product.UnitsOnOrder = unitsOnOrder.Value;
 if (reorderLevel == null)
  product.SetReorderLevelNull();
 else
  product.ReorderLevel = reorderLevel.Value;
 product.Discontinued = discontinued;

 // Add the new product
 products.AddProductsRow(product);
 int rowsAffected = Adapter.Update(products);

 // Return true if precisely one row was inserted, otherwise false
 return rowsAffected == 1;
 }

 [System.ComponentModel.DataObjectMethodAttribute
 (System.ComponentModel.DataObjectMethodType.Update, true)]
 public bool UpdateProduct
 (string productName, int? supplierID, int? categoryID, string quantityPerUnit,
 decimal? unitPrice, short? unitsInStock, short? unitsOnOrder,
 short? reorderLevel, bool discontinued, int productID)
 {
 NorthwindWithSprocs.ProductsDataTable products =
  Adapter.GetProductByProductID(productID);
 if (products.Count == 0)
  // no matching record found, return false
  return false;

 NorthwindWithSprocs.ProductsRow product = products[0];

 product.ProductName = productName;
 if (supplierID == null)
  product.SetSupplierIDNull();
 else
  product.SupplierID = supplierID.Value;
 if (categoryID == null)
  product.SetCategoryIDNull();
 else
  product.CategoryID = categoryID.Value;
 if (quantityPerUnit == null)
  product.SetQuantityPerUnitNull();
 else
  product.QuantityPerUnit = quantityPerUnit;
 if (unitPrice == null)
  product.SetUnitPriceNull();
 else
  product.UnitPrice = unitPrice.Value;
 if (unitsInStock == null)
  product.SetUnitsInStockNull();
 else
  product.UnitsInStock = unitsInStock.Value;
 if (unitsOnOrder == null)
  product.SetUnitsOnOrderNull();
 else
  product.UnitsOnOrder = unitsOnOrder.Value;
 if (reorderLevel == null)
  product.SetReorderLevelNull();
 else
  product.ReorderLevel = reorderLevel.Value;
 product.Discontinued = discontinued;

 // Update the product record
 int rowsAffected = Adapter.Update(product);

 // Return true if precisely one row was updated, otherwise false
 return rowsAffected == 1;
 }

 [System.ComponentModel.DataObjectMethodAttribute
 (System.ComponentModel.DataObjectMethodType.Delete, true)]
 public bool DeleteProduct(int productID)
 {
 int rowsAffected = Adapter.Delete(productID);

 // Return true if precisely one row was deleted, otherwise false
 return rowsAffected == 1;
 }
}

  該類和以前章節(jié)所創(chuàng)建的ProductsBLL class類差不多,只是它用的是數(shù)據(jù)集 NorthwindWithSprocs的ProductsTableAdapter 和 ProductsDataTable object對象。與ProductsBLL類使用using NorthwindTableAdapters不同,ProductsBLLWithSprocs類使用的是using NorthwindWithSprocsTableAdapters.同樣的,該類的ProductsDataTable和 ProductsRow對象使用的是NorthwindWithSprocs命名空間.我們的ProductsBLLWithSprocs class類提供了2種數(shù)據(jù)訪問方法GetProducts() 和GetProductByProductID().另外,還有添加、更新、刪除單個產(chǎn)品的方法.

第七步:在表現(xiàn)層出來數(shù)據(jù)集NorthwindWithSprocs

  此時,我們以及對數(shù)據(jù)訪問層和業(yè)務邏輯層做了相關改動,接下來我們要創(chuàng)建一個ASP.NET頁面調(diào)用BLL的ProductsBLLWithSprocs class類以展示、更新、刪除記錄.

  打開AdvancedDAL文件夾里的NewSprocs.aspx頁面,從工具箱拖一個GridView控件到頁面,設置其ID為Products. 從GridView的智能標簽將其綁定到一個名為ProductsDataSource的ObjectDataSource,設置其調(diào)用ProductsBLLWithSprocs類.


圖22:設置ObjectDataSource調(diào)用ProductsBLLWithSprocs類

  SELECT標簽的下拉列表里有2個方法,GetProducts()和GetProductByProductID().由于我們將在GridView里顯示所有的產(chǎn)品,所以我們選GetProducts()方法.在UPDATE, INSERT, 和DELETE標簽里都只有一個方法,確保選中它們,點Finish按鈕。

  完成設置后,Visual Studio會向GridView添加BoundFields列以及一個CheckBoxField列, 啟用GridView控件的“編輯”和“刪除”功能.


圖23:頁面包含一個可以分頁和排序的GridView控件.

  就像在以前的教程里探討過的一樣,完成ObjectDataSource的設置后,Visual Studio 會自動的將OldValuesParameterFormatString屬性設置為“original_{0}”. 為使數(shù)據(jù)修改功能正常工作,要么將該屬性刪除,要么將其設置為“{0}”.

  在我們完成設置、啟用“編輯”和“刪除”功能、將OldValuesParameterFormatString屬性設為其默認值后,頁面的聲明代碼看起來應該和下面的差不多:

asp:GridView ID="Products" runat="server" AutoGenerateColumns="False"
 DataKeyNames="ProductID" DataSourceID="ProductsDataSource">
 Columns>
 asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
 asp:BoundField DataField="ProductID" HeaderText="ProductID"
  InsertVisible="False" ReadOnly="True"
  SortExpression="ProductID" />
 asp:BoundField DataField="ProductName" HeaderText="ProductName"
  SortExpression="ProductName" />
 asp:BoundField DataField="SupplierID" HeaderText="SupplierID"
  SortExpression="SupplierID" />
 asp:BoundField DataField="CategoryID" HeaderText="CategoryID"
  SortExpression="CategoryID" />
 asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit"
  SortExpression="QuantityPerUnit" />
 asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
  SortExpression="UnitPrice" />
 asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock"
  SortExpression="UnitsInStock" />
 asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder"
  SortExpression="UnitsOnOrder" />
 asp:BoundField DataField="ReorderLevel" HeaderText="ReorderLevel"
  SortExpression="ReorderLevel" />
 asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
  SortExpression="Discontinued" />
 /Columns>
/asp:GridView>

asp:ObjectDataSource ID="ProductsDataSource" runat="server"
 DeleteMethod="DeleteProduct" InsertMethod="AddProduct"
 SelectMethod="GetProducts" TypeName="ProductsBLLWithSprocs"
 UpdateMethod="UpdateProduct">
 DeleteParameters>
 asp:Parameter Name="productID" Type="Int32" />
 /DeleteParameters>
 UpdateParameters>
 asp:Parameter Name="productName" Type="String" />
 asp:Parameter Name="supplierID" Type="Int32" />
 asp:Parameter Name="categoryID" Type="Int32" />
 asp:Parameter Name="quantityPerUnit" Type="String" />
 asp:Parameter Name="unitPrice" Type="Decimal" />
 asp:Parameter Name="unitsInStock" Type="Int16" />
 asp:Parameter Name="unitsOnOrder" Type="Int16" />
 asp:Parameter Name="reorderLevel" Type="Int16" />
 asp:Parameter Name="discontinued" Type="Boolean" />
 asp:Parameter Name="productID" Type="Int32" />
 /UpdateParameters>
 InsertParameters>
 asp:Parameter Name="productName" Type="String" />
 asp:Parameter Name="supplierID" Type="Int32" />
 asp:Parameter Name="categoryID" Type="Int32" />
 asp:Parameter Name="quantityPerUnit" Type="String" />
 asp:Parameter Name="unitPrice" Type="Decimal" />
 asp:Parameter Name="unitsInStock" Type="Int16" />
 asp:Parameter Name="unitsOnOrder" Type="Int16" />
 asp:Parameter Name="reorderLevel" Type="Int16" />
 asp:Parameter Name="discontinued" Type="Boolean" />
 /InsertParameters>
/asp:ObjectDataSource>

  此時,我們可以對GridView控件做些修改,比如在編輯界面里使用確認控件,在CategoryID 和 SupplierID列放置DropDownList控件,當點擊Delete按鈕時彈出確認框等.由于在以前的教程我們探討過這些主題,我不打算在此多花筆墨。

  不管你做沒做這些改進,讓我們在瀏覽器里對頁面測試,如圖24所示.在GridView控件里每行都可以編輯和刪除.


圖24:可以通過GridView對產(chǎn)品進行查看、編輯、刪除

結(jié)語:

  類型化數(shù)據(jù)集里的TableAdapters可以通過ad-hoc SQL statement或存儲過程訪問數(shù)據(jù)庫里的數(shù)據(jù).當處理存儲過程時,我們要么使用現(xiàn)有的存儲過程,要么使用TableAdapter向?qū)?chuàng)建一個基于SELECT查詢的新的存儲過程.在本文,我們考察了如何自動的創(chuàng)建一個存儲過程.

  雖然自動創(chuàng)建可以節(jié)省時間,但是在某些情況下,向?qū)ё詣觿?chuàng)建的存儲過程與我們的期望值還是有差距.比如自動創(chuàng)建的Products_Update存儲過程,它包含@Original_ProductID 和 @ProductID這2個參數(shù),但@Original_ProductID參數(shù)對我們來說是多余的.

在接下來的文章,我們將考察TableAdapter使用現(xiàn)有的存儲過程的情況.

  祝編程快樂!

作者簡介

  本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創(chuàng)始人,自1998年以來一直應用 微軟Web技術(shù)。大家可以點擊查看全部教程《[翻譯]Scott Mitchell 的ASP.NET 2.0數(shù)據(jù)教程》,希望對大家的學習ASP.NET有所幫助。

您可能感興趣的文章:
  • asp.net 結(jié)合mysql存儲過程進行分頁代碼
  • asp.net安全、實用、簡單的大容量存儲過程分頁
  • asp.net 存儲過程調(diào)用
  • asp.net結(jié)合aspnetpager使用SQL2005的存儲過程分頁
  • asp.net sql存儲過程
  • 在ASP.NET中用存儲過程執(zhí)行SQL語句
  • asp.net利用存儲過程和div+css實現(xiàn)分頁(類似于博客園首頁分頁)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十六:在TableAdapters中使用現(xiàn)有的存儲過程
  • 在ASP.NET 2.0中操作數(shù)據(jù)之七十二:調(diào)試存儲過程
  • 在ASP.NET 2.0中操作數(shù)據(jù)之七十三:用Managed Code創(chuàng)建存儲過程和用戶自定義函數(shù)(上部分)

標簽:中衛(wèi) 聊城 慶陽 清遠 臨夏 甘肅 海西

巨人網(wǎng)絡通訊聲明:本文標題《在ASP.NET 2.0中操作數(shù)據(jù)之六十五:在TableAdapters中創(chuàng)建新的存儲過程》,本文關鍵詞  在,ASP.NET,2.0,中,操作,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關。
  • 相關文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數(shù)據(jù)之六十五:在TableAdapters中創(chuàng)建新的存儲過程》相關的同類信息!
  • 本頁收集關于在ASP.NET 2.0中操作數(shù)據(jù)之六十五:在TableAdapters中創(chuàng)建新的存儲過程的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 江苏海豚船舶机械有限公司| 马鞍山 机械有限公司| 华鑫机械制造有限公司| 朗维纺织机械有限公司| 上海杰姆博机械设备有限公司| 上海升立机械制造有限公司| 湖北三六重工有限公司| 惠州市机械有限公司| 杭州华兴机械有限公司| 新乡市中天机械有限公司| 河南森源重工有限公司| 机械有限公司经营范围| 苏州 机械 有限公司| 郑州江河重工有限公司| 山东愚公工程机械有限公司| 上海宝闽钢铁有限公司| 唐山松汀钢铁有限公司| 杭州山虎机械有限公司| 唐山利军机械有限公司| 江苏仁达机械有限公司| 无锡金比机械有限公司| 河源德润钢铁有限公司| 国研机械设备有限公司| 江阴凯澄起重机械有限公司| 东莞元渝机械有限公司| 阳煤化机械有限公司| 临沂市机械有限公司| 大连升隆机械有限公司| 上海玖钲机械设备有限公司| 沧州昌鸿磨浆机械有限公司| 莱州三和机械有限公司| 科瑞森机械有限公司| 南通昭和机械有限公司| 上海创灵包装机械制造有限公司| 江苏液压机械有限公司| 保定市机械制造有限公司| 山西立恒钢铁有限公司| 山东机械设备有限公司| 磊蒙机械设备有限公司| 上海定盛机械有限公司| 青州汇众机械有限公司| 杭州中力机械设备有限公司| 山东德州恒特重工有限公司 | 上海先德机械工程有限公司 | 南京重霸起重设备有限公司 | 上海精密机械有限公司| 山东新船重工有限公司| 迅得机械东莞有限公司| 基伊埃机械设备天津有限公司| 深圳市美鹏机械设备有限公司 | 连云港亚新钢铁有限公司| 烟台工程机械有限公司| 韩通船舶重工有限公司| 杭州金竺机械有限公司| 成都大华路面机械有限公司| 昆山塑料机械有限公司| 瑞安市瑞博机械有限公司| 浙江飞挺机械有限公司| 上海中远海运重工有限公司| 中信重工开诚智能装备有限公司 | 山东天瑞重工有限公司| 张家港机械设备有限公司| 汕头机械厂有限公司| 天津宏大纺织机械有限公司| 商丘机械设备有限公司| 射阳 机械有限公司| 天津市钢铁贸易有限公司| 机械电子制造有限公司| 佛山陶瓷机械有限公司| 东莞市金坤机械设备有限公司| 快克数控机械有限公司| 杭州高福机械制造有限公司| 诸城市中天机械有限公司| 同向兴业机械有限公司| 澳太机械制造有限公司| 杭州化工机械有限公司| 恒力泰机械有限公司| 成都海科机械设备制造有限公司 | 江苏韩通船舶重工有限公司| 大连矢岛机械有限公司| 山东碧海机械有限公司| 山东兴华机械有限公司| 乐星机械无锡有限公司| 上海矿山机械有限公司| 柳州市机械有限公司| 大连东拓工程机械制造有限公司| 东莞机械制造有限公司| 上海斯特克沃森重工设备有限公司| 无锡新世杰辊压机械有限公司| 佛山市优霸机械设备有限公司| 首钢长治钢铁有限公司| 天津华悦包装机械有限公司| 河南起重机械有限公司| 青州矿砂机械有限公司| 浙江万能弹簧机械有限公司| 衡阳纺织机械有限公司| 常州市新武机械有限公司 | 台州特特机械有限公司| 广州汉牛机械设备有限公司| 福州展志钢铁有限公司| 武汉 机械制造有限公司| 南阳 机械制造有限公司| 泉州金鹰机械有限公司| 丰精密机械有限公司| 上海环野机械有限公司| 卫华起重机有限公司| 济南农沃机械有限公司| 潍坊钰兴机械有限公司| 首唐宝生钢铁有限公司| 苏州英维特精密机械有限公司 | 云南昆鼎机械设备有限公司| 河南龙昌机械制造有限公司| 佛山顺德区机械有限公司| 河南胜飞石油机械有限公司| 无锡市江益液压机械成套有限公司 | 集瑞联合重工有限公司| 南通佳吉机械有限公司| 广州市力进食品机械有限公司| 浙江保龙机械有限公司| 山东通用机械有限公司| 宏力机械设备有限公司| 安徽泰恒机械制造有限公司| 饶阳鸿源机械有限公司| 枣庄誉源挂车机械有限公司| 湖北首开机械有限公司| 浙江路杰机械有限公司| 瑞 机械有限公司| 范斯特机械有限公司| 江苏方圣机械有限公司| 建荣精密机械有限公司| 青岛德盛机械制造有限公司| 常州新燎原机械有限公司| 青岛璞盛机械有限公司| 浙江汉克机械有限公司| 聊城 机械有限公司| 郑州市联华机械制造有限公司 | 天津天丰钢铁有限公司| 江苏民生重工有限公司| 上海塑料机械有限公司| 启英机械设备有限公司| 福州协展机械有限公司| 国机重工洛阳有限公司| 合肥华运机械有限公司| 浙江宏涛机械有限公司| 河南工程机械有限公司| 江苏舜天机械进出口有限公司| 武汉船用机械有限公司| 新乡市起重机有限公司| 东莞市乔锋机械有限公司| 深圳液压机械有限公司| 上海乾承机械设备有限公司| 浙江向隆机械有限公司| 广州广田包装机械有限公司| 常州汉森机械有限公司| 浙江麒龙起重机械有限公司| 精一机械(中山)有限公司| 东莞机械设备制造有限公司| 常州曼恩机械有限公司| 宝鸡至信机械有限公司| 青岛欧普机械设备有限公司 | 常熟飞龙机械有限公司| 锦机械设备有限公司| 山东华准机械有限公司| 天津市钢铁有限公司| 山东枭隆机械有限公司| 东莞市三米通用机械有限公司| 宁波东泰机械有限公司| 精雕精密机械有限公司| 浙江炜冈机械有限公司| 东莞市鑫焘机械有限公司| 中山市翠山机械制造有限公司| 武汉臻尚机械设备有限公司| 兰州机械设备有限公司| 浙江金辉机械有限公司| 佳木斯佳联收获机械有限公司 | 唐山亚捷机械有限公司| 成都神钢建设机械有限公司| 河南甲庚机械设备有限公司| 招远华丰机械设备有限公司| 唐山利军机械有限公司| 机械有限公司起名大全| 孝感金达钢铁有限公司| 汶瑞机械山东有限公司| 山东永华机械有限公司| 河南华北起重吊钩有限公司| 上海隆麦机械有限公司| 长沙中传机械有限公司| 无锡诺德传动机械有限公司| 河北食品机械有限公司| 江苏清淮机械有限公司| 济宁鑫宏工矿机械设备有限公司| 郑州鼎盛机械设备有限公司| 威海化工机械有限公司招聘| 动力机械制造有限公司| 安阳亚新钢铁有限公司| 安宁永昌钢铁有限公司| 江苏联鑫钢铁有限公司| 洛阳洛北重工机械有限公司| 嘉泰数控机械有限公司| 东莞宏品智能机械有限公司| 常州南鹏机械有限公司| 山东起重机有限公司| 浙江东雄重工有限公司| 北京食之秀机械设备有限公司| 中山市翠山机械制造有限公司| 鑫泰数控机械有限公司| 联程机械宁波有限公司| 溧阳机械制造有限公司| 宁夏瑞光机械有限公司| 海益机械配件有限公司| 山东逸通机械有限公司| 工程的机械设备有限公司| 深圳市包装机械有限公司| 新疆丰泰钢铁有限公司| 浙江名瑞机械有限公司| 温州镇田机械有限公司| 开封元创机械有限公司| 固达机械制造有限公司| 泉州精镁机械有限公司| 速技能机械有限公司| 佳木斯佳联收获机械有限公司| 山推工程机械有限公司| 张家港市机械有限公司| 山东嘉意机械有限公司| 江苏汉庭机械制造有限公司| 广州众起办公用品有限公司| 河南佳德机械有限公司| 北京液压机械有限公司| 山东源泉机械有限公司| 江淮重工机械有限公司| 通力机械制造有限公司| 四平方向机械有限公司| 浙江云广机械制造有限公司| 广州新麦机械有限公司| 天津江天重工有限公司| 东莞仕能机械设备有限公司| 中山 机械 有限公司| 武汉船舶重工有限公司| 上海佳成服装机械有限公司| 济宁机械制造有限公司| 洛阳鹏起实业有限公司怎么样 | 南京利晨机械有限公司| 上海丰禾精密机械有限公司| 长沙凯瑞重工机械有限公司| 宝鸡至信机械有限公司| 佛山定中机械有限公司| 宁波丰州机械有限公司| 台州农业机械有限公司| 常州拓美威精密机械有限公司| 常州倍安特动力机械有限公司 | 山东三维重工有限公司| 宁波华表机械制造有限公司| 阳煤化机械有限公司| 大连行健数控机械技术有限公司| 湖北 机械 有限公司| 无锡建筑机械有限公司| 廊坊 包装机械有限公司| 武汉机械工程有限公司| 南阳机械制造有限公司| 无锡市阳通机械设备有限公司| 裕民机械工业有限公司| 伟拓压铸机械有限公司| 江苏优轧机械有限公司| 南京明瑞机械设备有限公司| 天津富启机械有限公司| 宏力机械设备有限公司| 江苏优远机械有限公司| 天津市三鼎包装机械有限公司| 中铁重工有限公司武汉| 温州中环机械设备有限公司| 上海胡鑫机械有限公司| 盘起工业大连有限公司| 济南威力机械有限公司| 常州斯塔克机械设备有限公司| 北京食之秀机械设备有限公司| 江阴 机械制造有限公司| 梧州沃华机械有限公司| 濮阳崛起装饰有限公司| 烟台市石油机械有限公司| 重庆海松机械有限公司| 潍坊天洁机械有限公司| 常州精密机械有限公司| 南平 机械 有限公司| 玉环机械制造有限公司| 上海磊友成套机械设备有限公司 | 佳先机械制造有限公司| 济南钢铁贸易有限公司| 上海展焱包装机械有限公司| 中山机械制造有限公司| 无锡宝业机械有限公司| 上海纳丰机械设备有限公司| 德州宝鼎液压机械有限公司| 广东机械制造有限公司| 上海起发实验试剂有限公司| 莱州市龙骏化工机械有限公司 | 湖南宇泰重工有限公司| 郑州企鹅粮油机械有限公司| 宜兴机械设备有限公司| 开封市茂盛粮食机械有限公司| 长沙昊博机械设备有限公司| 杭州天恒机械有限公司| 常州市工程机械有限公司| 济南 机械设备有限公司| 上海江埔印刷机械有限公司| 中山冠力机械有限公司| 郑州华隆机械制造有限公司| 南昌欣向荣机械有限公司| 中农丰茂植保机械有限公司| 广东华鼎机械有限公司| 厦门工业机械有限公司| 唐山国义特种钢铁有限公司| 青岛永强木工机械有限公司 | 广州市中铭印刷机械有限公司| 郑州水工机械有限公司| 浙江万通重工有限公司| 宁波达峰机械有限公司| 洛阳精密机械有限公司| 辽宁亿丰钢铁有限公司| 河南嵩山重工有限公司| 徐州华东机械有限公司| 无锡布勒机械制造有限公司招聘| 机械有限公司经营范围| 苏州动力机械有限公司| 福建盛达机械有限公司| 盐城万富隆机械制造有限公司| 余姚市机械有限公司| 东莞新宇机械有限公司| 海宁市腾达机械有限公司| 山东平安工程机械有限公司| 济南锐捷机械设备有限公司| 杭州一鼎传动机械有限公司| 江阴市勤业化工机械有限公司| 南通安港机械有限公司| 安徽华机械有限公司| 佛山市洛德机械设备有限公司| 温州立胜印刷包装机械有限公司| 北京建筑机械有限公司| 华威机械制造有限公司| 广州市金王机械设备有限公司| 浙江超力机械有限公司| 河南龙昌机械制造有限公司| 河北鑫晟德农业机械制造有限公司| 法麦凯尼柯机械有限公司| 太原重工轨道交通设备有限公司 | 山东平安工程机械有限公司| 上海高德机械有限公司| 常州武进机械有限公司| 湖北三六重工有限公司| 昆明机械设备有限公司| 昆山总馨机械有限公司| 广州闽欣机械设备有限公司| 江苏常动机械有限公司| 华力重工机械有限公司| 浙江恒齿传动机械有限公司| 福州 机械制造有限公司| 郑州长城机械有限公司| 上海 起重设备有限公司| 重庆龙文机械设备有限公司| 天烨机械工程有限公司| 机械设备出口有限公司| 海之力机械有限公司| 郑州华宏机械设备有限公司| 温州瑞达机械有限公司| 济南龙铸液压机械有限公司| 江阴市化工机械有限公司| 湖南中联陶瓷机械有限公司| 杭州海特机械有限公司| 湖北 机械制造有限公司| 佛山柯田包装机械有限公司| 鹤壁市豫星机械制造有限公司| 大连港机械有限公司| 上海皆力机械设备有限公司| 江苏钢锐精密机械有限公司| 东远机械昆山有限公司| 本源兴(上海)包装机械材料有限公司 | 荆州华力机械有限公司| 广州惠辉机械设备有限公司| 上海沁艾机械设备有限公司| 深圳新劲力机械有限公司| 辽宁 机械制造有限公司| 萨克米机械有限公司| 河北巨牛机械有限公司| 青岛美光机械有限公司| 上海恒启机械设备有限公司| 康铖机械设备有限公司| 河北洲际重工有限公司| 青岛诺恩包装机械有限公司| 机械有限公司 招聘| 合肥精密机械有限公司| 上海盛普机械制造有限公司| 同安木工机械有限公司| 陕西重型机械制造有限公司| 沃得农业机械有限公司| 东莞市台立数控机械有限公司| 唐山九江钢铁有限公司| 南通丰威机械有限公司| 无锡通用起重运输机械有限公司| 浙江机械有限公司招聘信息| 华群数控机械有限公司| 济南鑫金龙机械有限公司| 新乡市中天机械有限公司 | 北京机械设备有限公司| 才美机械制造(上海)有限公司| 鞍山机械设备有限公司| 启益电器机械有限公司| 潍坊华全动力机械有限公司| 上海皆力机械设备有限公司| 武汉 机械制造有限公司| 宁波迪奥机械有限公司| 杭州建明机械有限公司| 长沙昊博机械设备有限公司| 山东青州机械有限公司| 沧州铁狮磨浆机械有限公司| 昆明呈钢钢铁有限公司| 海南建设工程机械施工有限公司 | 青州市三联重工设备制造有限公司| 福建烟草机械有限公司| 东莞市今塑精密机械有限公司| 江门振达机械有限公司| 山东章晃机械工业有限公司 | 联征机械设备有限公司| 中核 天津 机械有限公司| 杭州康发塑料机械有限公司| 定州宏远机械有限公司| 江苏炬峰机械有限公司| 佛山创宝包装机械有限公司| 重庆动霸机械制造有限公司| 北京盛美食品机械有限公司| 扬州市天发试验机械有限公司| 青岛新型建设机械有限公司| 河南省新乡市矿山起重机有限公司 | 北京刷机械有限公司| 上海达辉机械有限公司| 昌利机械制造有限公司| 海华机械制造有限公司| 杭州海兴机械有限公司| 河北德林机械有限公司| 青岛岛宇机械有限公司| 华菱涟源钢铁有限公司| 常州浦发机械有限公司| 上海尼尔机械制造有限公司| 上海诚淘机械有限公司| 江苏福克斯机械有限公司| 绵阳科睿机械有限公司| 杭州春江制药机械有限公司| 广州汉牛机械设备有限公司| 广州文穗塑料机械有限公司| 浙江中兴机械制造有限公司| 浙江春江茶叶机械有限公司| 工程机械有限公司经营范围| 山西汉通机械有限公司| 佛山三技精密机械有限公司| 扬州文轩钢铁有限公司| 西安凌通机械有限公司| 徐州川一工程机械有限公司| 无锡旭辉机械有限公司| 宏力机械设备有限公司| 山东万力起重机械有限公司| 浙江顶峰机械有限公司| 鄂州吴城钢铁有限公司| 常州嘉耘机械有限公司| 江苏卫东机械有限公司| 上海紫光机械有限公司| 河北机械制造有限公司| 安徽柳工起重机有限公司| 上海玖钲机械设备有限公司| 威海石岛重工有限公司| 杭州大禹机械有限公司| 南京高立工程机械有限公司 | 邢台机械制造有限公司| 沧州昌鸿磨浆机械有限公司 | 常州华威起重工具有限公司| 平煤机械设备有限公司| 注册机械设备有限公司有什么要求| 南京凯友橡塑机械有限公司| 上海优拜机械有限公司| 成都 机械 有限公司| 重庆江峰机械有限公司| 浙江铖虹机械有限公司| 苏州华尔普机械有限公司| 苏州华致鑫精密机械有限公司| 深圳龙润彩印机械设备有限公司| 广东思沃精密机械有限公司| 天翔机械制造有限公司| 北京石油机械有限公司| 佛山 机械有限公司| 河南云天起重机械有限公司| 安丘瑞源机械制造有限公司| 上海乾承机械设备有限公司| 宁波星源机械有限公司| 宁波昌扬机械工业有限公司| 娄底 有限公司 机械| 西安金力特机械设备有限公司| 洛阳泽华机械设备有限公司| 凯伯精密机械有限公司| 广州包装机械有限公司| 天津市钢铁贸易有限公司| 德锐尔机械有限公司| 台州 精密机械有限公司| 无锡精派机械有限公司| 常州工程机械有限公司| 温州华印机械有限公司| 宁波佳利来机械制造有限公司| 珠海裕丰钢铁有限公司| 广西中源机械有限公司| 宁波工业机械有限公司| 安阳市赛尔德精工机械有限公司| 法麦凯尼柯机械有限公司| 唐山兴隆钢铁有限公司| 无锡化工机械有限公司| 重庆恒科机械制造有限公司| 河南铁山起重设备有限公司| 瑞鼎精密机械有限公司| 邢台德龙钢铁有限公司| 广州 机械 有限公司| 东莞高臻机械设备有限公司| 华宇机械制造有限公司| 龙文机械设备有限公司| 东平开元机械有限公司| 食品机械制造有限公司| 云南科玛机械设备有限公司| 桂林正东机械制造有限公司| 恒联食品机械有限公司| 上海信机械有限公司| 济南弘川包装机械有限公司| 上海豪德机械有限公司| 德州 机械有限公司| 青岛鲁奥机械有限公司| 沧州昌鸿磨浆机械有限公司| 建设工程有限公司起名| 天津亨旺机械有限公司| 杭州兴达机械有限公司| 昆山市烽禾升精密机械有限公司 | 惟其信石油机械(天津)有限公司 | 郑州华郑机械有限公司| 上海映易包装机械设备有限公司| 江苏百事德机械有限公司| 中意合资 威尼托机械有限公司| 上海宾迪机械设备有限公司| 洛阳隆中重工机械有限公司| 杭州富朗机械有限公司| 中科包装机械有限公司| 汉邦机械制造有限公司| 绍兴三纺机械有限公司| 河北水利机械有限公司| 莱州市华弘机械有限公司| 宣城 机械 有限公司| 上海西马特制药机械有限公司| 苏州仁成包装机械有限公司| 江阴市长达钢铁有限公司| 烟台绿林机械设备制造有限公司| 宁波力劲机械有限公司| 上海海邦机械设备制造有限公司 | 上海佳力士机械有限公司| 瑞特精密机械有限公司| 深圳市鑫宏伟机械设备有限公司| 无锡烨隆精密机械有限公司| 沈阳斗山工程机械有限公司| 聊城日发纺织机械有限公司| 连云港兴鑫钢铁有限公司| 江阴派格机械设备有限公司| 木工机械设备有限公司| 江苏银华春翔机械制造有限公司| 金源机械制造有限公司| 青岛吉瑞特机械制造有限公司| 杭州天恒机械有限公司| 苏州艾卓精密机械有限公司| 秦皇岛秦冶重工有限公司| 南通天成机械有限公司| 上海鼎龙机械有限公司| 友隆精密机械有限公司| 河南路友机械有限公司| 山东宁联机械制造有限公司| 江苏金韦尔机械有限公司| 上海宁金钢铁有限公司| 深圳市合发齿轮机械有限公司| 江苏贝斯特数控机械有限公司| 珠海仕高玛机械设备有限公司| 全氏食品机械(上海)有限公司| 郑州重型机械有限公司| 昆山总馨机械有限公司| 重庆宏工工程机械有限公司| 安徽涌诚机械有限公司| 新科起重机有限公司| 郑州锦德润机械设备有限公司| 上海集嘉机械有限公司| 嵩县煜嵩机械有限公司| 金泰机械制造有限公司| 新乡市威远机械有限公司| 大连 橡塑机械有限公司| 扬州三源机械有限公司| 上海方星机械设备制造有限公司 | 苏州德伊捷自动化机械有限公司| 济南帕特机械有限公司| 上海乾享机械设备有限公司 | 如皋市联创捏合机械有限公司| 江阴市西城钢铁有限公司 | 青岛工程机械有限公司| 临沂盛德机械有限公司| 东莞市恒生机械制造有限公司| 济南液压机械有限公司| 杭州千和精密机械有限公司 | 山东龙腾机械有限公司| 江西江锻重工有限公司| 昆明远桥机械有限公司| 深圳市 机械有限公司| 天津百利二通机械有限公司| 京西重工北京有限公司| 常州市良久机械制造有限公司| 河北安丰钢铁有限公司| 烟台石油机械有限公司| 邦贝液压机械有限公司| 山东临工工程机械有限公司招聘| 特斯克机械有限公司| 无锡三麦机械有限公司| 沈阳机械设备有限公司| 桂林恒达矿山机械有限公司| 贝奇尔机械有限公司| 瑞安市印刷机械有限公司| 浙江高达机械有限公司| 江苏中闽钢铁有限公司| 重庆江峰机械有限公司| 湖南工程机械有限公司| 华信陶瓷机械有限公司| 济南东泰机械制造有限公司| 宜兴市华鼎机械有限公司| 浙江自力机械有限公司| 江苏博森机械制造有限公司 | 浩强精密机械有限公司| 河南天成矿山起重机有限公司 | 宁夏天地奔牛银起设备有限公司| 台湾精密机械有限公司| 起重机制造有限公司| 广东达诚机械有限公司| 安徽大洋机械有限公司| 无锡东元精密机械有限公司| 杭州杭达机械有限公司| 无锡建筑机械有限公司| 宁波伟隆传动机械有限公司| 东莞市天成机械有限公司| 艾沃意特机械设备制造有限公司 | 深圳 机械设备有限公司| 南兴木工机械有限公司| 潍坊广德机械有限公司| 唐山宝泰钢铁有限公司| 广东万联包装机械有限公司| 无锡光良塑料机械有限公司| 宁波中能连通机械有限公司| 杭州海铭钢铁有限公司| 昆山市众捷塑料机械有限公司| 江阴起重机械有限公司| 泊头市环保机械有限公司| 成都鑫泽机械有限公司| 杭州科豪机械有限公司| 山西太行钢铁有限公司| 浙江启博机械有限公司| 大连蓝德机械有限公司| 江苏双箭输送机械有限公司| 建筑装饰有限公司起名| 阳春市新钢铁有限公司| 温州设备机械有限公司| 哈尔滨机械制造有限公司| 州东方机械有限公司| 建湖县 机械有限公司| 智能机械制造有限公司| 邢台凌远机械制造有限公司 | 上海隆康机械设备有限公司 | 上海杰伟机械制造有限公司| 上海天驰制药机械有限公司| 无锡市江益液压机械成套有限公司| 安丰钢铁有限公司地址| 河南通达重工有限公司| 济南北斗星机械设备有限公司| 山东济宁机械有限公司| 常熟 机械 有限公司| 东莞市全永机械制造有限公司 | 邯郸包装机械有限公司| 合肥包装机械有限公司| 起重机制造有限公司| 常德 机械有限公司| 无锡钢铁贸易有限公司| 唐山泰钢钢铁有限公司| 上海玉兆精密机械有限公司| 江苏苏能机械有限公司| 浙江起重机有限公司| 科瑞森机械有限公司| 北仑旭升机械有限公司| 淄博宙灿机械有限公司| 武汉精密机械有限公司| 东宇机械设备有限公司| 工程的机械设备有限公司| 新乡市矿山重型起重机有限公司| 无锡市巨神起重机有限公司 | 云南昆鼎机械设备有限公司| 邢台钢铁有限公司官网| 河北春耕机械制造有限公司| 佛山三技精密机械有限公司| 山东长江机械有限公司| 杭州永创机械有限公司| 中信重工开诚智能装备有限公司| 牡丹江机械有限公司| 运输有限公司起名大全| 青岛银象机械有限公司| 成都神钢建设机械有限公司| 厦门厦工重工有限公司| 唐山丰润区钢铁有限公司| 西安金力特机械设备有限公司| 广州起重机械有限公司招聘| 昆山烽禾升精密机械有限公司| 蚌埠神舟机械有限公司| 源鸿机械制造有限公司| 锦州 机械有限公司| 宁波天竺工程机械有限公司| 大阳通用机械有限公司| 石家庄嘉祥精密机械有限公司 | 衢州巨鑫机械有限公司| 白鸽食品机械有限公司| 鑫锐机械设备有限公司| 南京包装机械有限公司| 东莞市欧西曼机械设备有限公司| 诸城市华邦机械有限公司| 科尼乐机械设备有限公司| 山西中升钢铁有限公司| 佳友精密机械有限公司| 广州市勤达机械设备有限公司| 烟台安信精密机械有限公司| 联德精密机械有限公司| 宁波江北机械有限公司| 兴鑫钢铁有限公司电话| 天宇机械制造有限公司| 上海锐精密机械有限公司| 常州东进机械有限公司| 泰安越泰机械有限公司| 广州铸星机械有限公司| 山东环保机械有限公司| 济南市恒宇机械有限公司| 菏泽瑞康机械有限公司| 保定市机械制造有限公司| 鞍钢朝阳钢铁有限公司| 威海光威精密机械有限公司| 浙江卓驰机械有限公司| 苏州宁兴精密机械有限公司| 南京星德机械有限公司| 大方起重机器有限公司| 湖南长河机械有限公司| 邢台机械制造有限公司| 塑料包装机械有限公司| 宁波旭升机械有限公司| 台州迈兴机械有限公司| 盐城市联鑫钢铁有限公司| 北京龙泰机械设备安装有限公司 | 山东长江机械有限公司| 宁波辉旺机械有限公司| 汤阴升达机械有限公司| 济宁恒远机械有限公司| 上海 食品机械有限公司| 杭州卡塞尔机械有限公司| 苏拉纺织机械有限公司| 苏州 工业机械有限公司| 青岛高通机械有限公司| 爱克苏州机械有限公司| 宁波海伯精密机械制造有限公司| 广州市德晟机械有限公司| 常州欧鹰焊割机械有限公司| 华电曹妃甸重工装备有限公司| 温州博大机械有限公司| 杭州金狮机械有限公司| 东莞市通盛机械有限公司| 鑫港机械制造有限公司| 安徽同铸工程机械有限公司| 昆山 环保机械有限公司| 卓郎新疆智能机械有限公司| 长沙凯瑞重工机械有限公司| 华信陶瓷机械有限公司| 天津宏大纺织机械有限公司| 河北洲际重工有限公司| 温州博宇机械有限公司| 中山市 机械有限公司| 张家港市家源机械有限公司 | 金龙机械制造有限公司| 江苏青山机械有限公司| 山东德丰重工有限公司| 成都大华路面机械有限公司| 上海的纸箱机械有限公司| 上海 起重设备有限公司| 瑞安市机械制造有限公司| 河南重工机械有限公司| 恒力泰机械有限公司| 昆山江锦机械有限公司| 徐州二川机械有限公司| 福州六和机械有限公司| 常熟市机械有限公司| 诸城市华邦机械有限公司| 马长江钢铁有限公司| 扬州沃尔特机械有限公司| 上海翊特机械有限公司| 人科机械陕西有限公司| 唐山鑫达钢铁有限公司| 厦门机械设备有限公司| 中山中炬精工机械有限公司| 潍坊润鑫机械有限公司| 天津润机械有限公司| 江苏重型机械有限公司| 宁波中机械有限公司| 郑州志乾机械设备有限公司| 南京福能机械设备有限公司| 天津泰威机械有限公司| 东莞祥艺机械有限公司| 厦门机械工业有限公司| 无锡英那威特机械发展有限公司| 冈热机械常州有限公司| 河北明芳钢铁有限公司| 浙江建达机械有限公司| 镇田机械平湖有限公司| 河南机械设备制造有限公司列表| 江苏如皋钢铁有限公司| 博凯机械上海有限公司| 东莞市日东超声波机械有限公司| 宇进注塑机械有限公司| 大理大钢钢铁有限公司| 山东天路重工有限公司| 江苏常动机械有限公司| 滕州三合机械有限公司| 东莞 精密机械有限公司| 宁波康博机械有限公司| 浙江包装机械有限公司| 济南弘川包装机械有限公司 | 机械设备出口有限公司| 青岛华牧机械有限公司| 西安凌通机械有限公司| 广州恒联食品机械有限公司 | 江西协旭机械有限公司| 北京大铭世进机械设备有限公司 | 广州易鸿机械有限公司| 上海磊友成套机械设备有限公司| 南京高立工程机械有限公司| 东莞英豪机械有限公司| 安徽宇华机械制造有限公司| 昆成机械昆山有限公司| 浙江小伦制药机械有限公司 | 速技能机械有限公司| 湖南一田农业机械有限公司| 上海瑞阳机械有限公司| 宜昌机械设备有限公司| 恒力泰机械有限公司| 化工有限公司起名大全| 新乡市起重机厂有限公司| 鼎工机械制造有限公司| 佛山 机械有限公司| 上海派协包装机械有限公司| 上海山卓重工机械有限公司| 隆英金坛机械有限公司| 中山市包装机械有限公司| 苏州启点机械有限公司| 宜兴富曦机械有限公司| 广州合成机械有限公司| 合心机械制造有限公司| 南阳 机械 有限公司| 西安 工程机械有限公司| 上海德机械设备有限公司| 荣龙精密机械有限公司| 苏州市丰科精密机械有限公司 | 山东重机械有限公司| 山东明沃机械有限公司| 潍坊竣通机械配套有限公司| 重庆起重机厂有限公司| 台州 精密机械有限公司| 唐山松汀钢铁有限公司| 斗山工程机械有限公司| 无锡精密机械有限公司| 广州惠德机械有限公司| 天津天丰钢铁有限公司| 沂水阳东机械有限公司| 浙江盾安机械有限公司| 苏州捷合机械有限公司| 合肥中达机械制造有限公司| 宁波五峰机械有限公司| 济南岳峰机械有限公司| 南牧机械设备有限公司| 温州科瑞机械有限公司| 北京北宇机械设备有限公司| 嘉兴格鲁博机械有限公司| 唐山众达机械轧辊有限公司| 河南省力神机械有限公司| 上海慧丰传动机械有限公司| 济宁通佳机械有限公司| 常州小松工程机械有限公司招聘| 邢台市振成机械有限公司| 昆山环保机械有限公司| 重庆精密机械有限公司| 沈阳瑞熠机械有限公司| 江苏红日钢铁有限公司| 山东瑞华工程机械有限公司| 温州科瑞机械有限公司| 郑州江河重工有限公司| 郑州宇通重工有限公司| 武汉金火旺机械设备有限公司| 苏州恩贝德机械有限公司| 临沂铸信机械有限公司| 河南柴油机重工有限公司| 格林策巴赫机械有限公司| 山西美锦钢铁有限公司| 上海炬钢机械制造有限公司| 上海淘乐机械有限公司| 无锡市光彩机械制造有限公司| 上海亚遥工程机械有限公司| 萍乡萍钢安源钢铁有限公司| 鼎工机械制造有限公司| 泰安重工机械有限公司| 开封良益机械有限公司| 山东良鑫机械有限公司| 唐山文丰钢铁有限公司| 宝钢湛江钢铁有限公司招聘| 湖南五丰机械有限公司| 重的机械有限公司招聘| 浙江温兄机械阀业有限公司| 宁波博信机械制造有限公司| 苏州精创机械有限公司| 烟台万事达金属机械有限公司| 深圳市神田机械设备有限公司 | 上海传动机械有限公司| 佛山市玻璃机械有限公司| 洛阳友建工程机械有限公司| 诸城市金祥机械有限公司| 南京康尼精密机械有限公司| 潍坊 机械有限公司| 同向兴业机械有限公司| 上海建冶重工机械有限公司| 哈尔滨联科包装机械有限公司 | 山东枭隆机械有限公司| 南京金城机械有限公司| 大连科信机械有限公司| 常州奥恒机械有限公司| 上海木工机械有限公司| 苏州联又机械有限公司| 威海达盛机械有限公司| 上海陆达包装机械制造有限公司| 上海慕鼎机械设备有限公司 | 山东 重工有限公司| 石家庄美迪机械有限公司| 上海起重运输机械厂有限公司| 湖南金峰机械有限公司| 山东利丰机械有限公司| 上海盟申机械有限公司| 无锡诺亚机械有限公司| 北京 机械 有限公司| 法麦凯尼柯机械有限公司| 景隆重工机械有限公司| 蓬莱巨涛海洋工程重工有限公司怎么样 | 上海华预机械制造有限公司| 武安市明芳钢铁有限公司| 中山自动化机械有限公司| 宜兴富曦机械有限公司| 涂装机械设备有限公司| 鑫达机械制造有限公司| 上海起重电机厂有限公司| 石家庄工程机械有限公司| 台州宏汇机械有限公司| 杭州西子重工有限公司| 南京力霸起重设备机械有限公司 | 甘肃机械化建设工程有限公司| 常州坤世精密机械有限公司| 唐山正丰钢铁有限公司| 兰州华诚石化机械制造有限公司| 震德塑料机械有限公司| 成都富江机械制造有限公司| 青岛辉特重工有限公司| 台州机械制造有限公司| 江苏鼎盛重工有限公司| 芜湖汇丰机械工业有限公司| 扬州恒润海洋重工有限公司| 江苏奥马机械有限公司| 浙江双环传动机械有限公司| 上海龙工机械有限公司| 南京金顿重工机械有限公司| 山西亚新钢铁有限公司| 昆山尚亦精密机械有限公司| 江阴乐帕克智能机械有限公司| 温州工程机械有限公司| 西安亿起来贸易有限公司| 辽宁天一重工有限公司| 上海文胜机械设备有限公司 | 市瑞港机械有限公司| 江门市科杰机械自动化有限公司 | 上海北阅机械设备有限公司 | 随州盛星机械有限公司| 新乡市特昌振动机械有限公司| 洛阳路通重工机械有限公司| 中船重工重庆液压机电有限公司| 张家港市贝尔机械有限公司| 宁波天竺工程机械有限公司| 深圳机械院建筑设计有限公司| 南京恩梯恩精密机械有限公司| 自动化机械 上海有限公司| 佛山隆机械有限公司| 安徽食品机械有限公司| 上海瀚艺冷冻机械有限公司 | 东风井关农业机械有限公司 | 泰安市民乐机械制造有限公司|