日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
T-SQL存儲過程的應用
T-SQL存儲過程的應用
 更新時間:2008-8-4 4:57:29  點擊數(shù):27
【字體: 字體顏色

    下面以Northwind數(shù)據(jù)庫為例介紹在Visual Studio.net集成開發(fā)環(huán)境中如何調(diào)用存儲過程(C#)。
3.1創(chuàng)建存儲過程
    根據(jù)客戶端的需求創(chuàng)建實現(xiàn)一定功能的存儲過程,可以使用SQlServer企業(yè)管理器中的創(chuàng)建存儲過程向?qū)Щ蛘咧苯泳帉慡QL語句來創(chuàng)建存儲過程。
    List.1存儲過程清單
    [1]  CREATE PROCEDURE count_CustomerID
    [2]  @CustomerID nchar(5),
    [3]  @num int OUTPUT
    [4]  AS
    [5] SELECT @num=(SELECT COUNT(*) FROM orders WHERE CustomerID = @CustomerID)
    [6]  Return
    [7]  GO
    以上SQL語句創(chuàng)建一個名為count_CustomerID的存儲過程,這個存儲過程有一個輸入?yún)?shù)(參數(shù)名稱:CustomerID;類型:nchar(5);意義:標識商品的ID值)和一個輸出參數(shù)(參數(shù)名稱:num;類型:int;意義:某一商品的訂單數(shù)量)。該存儲過程實現(xiàn)的功能:根據(jù)客戶端調(diào)用存儲過程時傳入的商品ID值,然后計算此商品的訂單數(shù)量,將結果作為輸出參數(shù)返回給客戶端的調(diào)用程序。
    注:創(chuàng)建存儲過程的語法詳見SQLServer聯(lián)機叢書。
3.2設計應用程序
    數(shù)據(jù)庫和存儲過程設計好之后,就可以開始設計應用程序了。首先要做的是連接數(shù)據(jù)庫,可以通過SqlConnection對象(命名空間:System.Data.SqlClient)、OleDbConnection對象(命名空間: System.Data.OleDb)、OdbcConnection 對象(命名空間:System.Data.Odbc)等方法連接數(shù)據(jù)庫。本文介紹使用SqlConnection對象連接數(shù)據(jù)庫。
    List.2 調(diào)用存儲過程
//添加命名空間
Using System.Data.SqlClient;
//使用SqlConnection對象連接數(shù)據(jù)庫
string ConnStr;
ConnStr="data source=local;initial catalog=Northwind; user id=user;password=pw";
SqlConnection conn =new SqlConnection(ConnStr);
//使用SqlCommand調(diào)用存儲過程
SqlCommand cmd=new SqlCommand(CustOrdersOrders,conn);//創(chuàng)建SqlCommand對象
conn. CommandType=CommandType.StoredProcedure;
SqlParameter CustID=new SqlParameter("@CustomerID ",SqlDbType.Char,5);
CustID.value=“ALFKI”;       //對輸入?yún)?shù)賦值
cmd.Parameters.Add(CustID);
SqlParameter Count=new SqlParameter("@num ",SqlDbType.int,4);
cmd.Parameters.Add(Count);
Count.Direction=ParameterDirection.Output; //指定參數(shù)為輸出參數(shù)
//開始執(zhí)行存儲過程
Conn.Open();               //打開數(shù)據(jù)庫連接
cmd.ExecuteNonQuery();     //執(zhí)行查詢
conn.Close();
//變量sum的值就是存儲過程返回的指定商品的訂單數(shù)量
int sum=Convert.ToInt32(cmd.Parameters["@total"].Value.ToString());

4存儲過程的其他功能
4.1擴展存儲過程
     在編寫數(shù)據(jù)訪問的程序時,有時需要實現(xiàn)一些SQLServer本身不能實現(xiàn)的功能,如訪問本地資源等,這時就可以使用擴展存儲過程。擴展存儲過程是以動態(tài)鏈接庫的形式實現(xiàn)的,在存儲過程中使用存儲在master數(shù)據(jù)庫中的系統(tǒng)存儲過程sp_addextendedproc將已經(jīng)編寫好的動態(tài)鏈接庫(.dll文件)中的函數(shù)聲明為擴展存儲過程,聲明之后就可以調(diào)用此函數(shù),從而實現(xiàn)所要實現(xiàn)的一些功能。
 具體語法略。
4.2調(diào)用Com組件
     Com,即組件對象模型,是一種以組件為發(fā)布單元的對象模型,這種模型是各種軟件組件可以使用統(tǒng)一的方式進行交互,不依賴于任何特定的語言和操作系統(tǒng)。Com的這種優(yōu)點使得越來越多的編程開發(fā)者采用這種編程方式。SQLServer中的存儲過程也支持Com這種編程方式。
    根據(jù)需求編寫Com組件,發(fā)布組件之后,使用存儲在master數(shù)據(jù)庫中的系統(tǒng)存儲過程sp_OACreate將Com對象實例化,之后就可以使用Com對象中的函數(shù)。
具體語法略。

5 優(yōu)化存儲過程
    如果一個應用程序所用的存儲過程較多,書寫又沒有一定的規(guī)范,將會影響以后的系統(tǒng)維護和較大存儲過程邏輯的難以理解,另外如果數(shù)據(jù)庫的數(shù)據(jù)量大或?qū)Υ鎯^程的性能要求很高,就會遇到優(yōu)化的問題,否則速度有可能很慢。一個經(jīng)過優(yōu)化過的存儲過程要比一個性能差的存儲過程的效率甚至高幾百倍。
     在編寫存儲過程時應該注意以下幾點
    ①盡量避免大事務操作,提高系統(tǒng)并發(fā)能力;
    ②盡量避免反復訪問同一張或幾張表,尤其是數(shù)據(jù)量較大的表,可以考慮先根據(jù)條件提取數(shù)據(jù)到臨時表中,然后再做連接,訪問這個臨時表;
    ③盡量避免使用游標,因為游標的效率較差,如果游標操作的數(shù)據(jù)超過1萬行,那么就應該改寫;如果使用了游標,就要盡量避免在游標循環(huán)中再進行表連接的操作;
    ④注意where語句的寫法,必須考慮語句順序,應該根據(jù)索引順序、范圍大小來確定條件子句的前后順序,盡可能的讓字段順序與索引順序相一致,范圍從大到;
    ⑤不要在where子句中的“=”左邊進行函數(shù)、算術運算或其他表達式運算,否則系統(tǒng)將可能無法正確使用索引;
    ⑥盡量使用exists代替select count(1)來判斷是否存在記錄,count函數(shù)只有在統(tǒng)計表中所有行數(shù)時使用,而且count(1)比count(*)更有效率。
    ⑦盡量使用“>=”,不要使用“>”;
    ⑧注意一些or子句和union子句之間的替換;
    ⑨注意表之間連接的數(shù)據(jù)類型,避免不同類型數(shù)據(jù)之間的連接;
此外,還要正確、高效地使用索引和操作臨時表;當然合理的算法使用也是優(yōu)化存儲過程,提高程序執(zhí)行效率的有效手段。

6存儲過程與數(shù)據(jù)安全
     從用戶對敏感數(shù)據(jù)的訪問角度,通過向用戶授予對存儲過程(而不是基礎表)的訪問權限,就可以控制對特定數(shù)據(jù)的訪問,實現(xiàn)對敏感數(shù)據(jù)的保護。
    存儲過程還可以幫助解決代碼安全問題。可以防止某些類型的 SQL 插入攻擊 - 主要是一些使用運算符(如 AND 或 OR)將命令附加到有效輸入?yún)?shù)值的攻擊。在應用程序受到攻擊時,存儲過程還可以隱藏業(yè)務規(guī)則的實現(xiàn)。
    另外,使用存儲過程使您可以使用 ADO.NET 中提供的 SqlParameter 類指定存儲過程參數(shù)的數(shù)據(jù)類型。這為驗證用戶提供的值類型(作為深層次防御性策略的一部分)提供了一個簡單方法。
    使用存儲過程增強數(shù)據(jù)安全性時值得注意的是,糟糕的安全性或編碼做法仍然會受到攻擊。對 SQL Server 角色創(chuàng)建和分配如果不加注意將導致訪問到不應看到的數(shù)據(jù)。同時,存儲過程不能防止所有的 SQL 插入代碼攻擊(例如,將數(shù)據(jù)操作語言 (DML) 附加到輸入?yún)?shù))。
    另外,無論SQL語句位于代碼還是位于存儲過程中,使用參數(shù)進行數(shù)據(jù)類型驗證都不是萬無一失的。所有用戶提供的數(shù)據(jù)(尤其是文本數(shù)據(jù))在傳遞到數(shù)據(jù)庫之前都應受到附加的驗證。

7  結束語
    本文簡單介紹了存儲過程的概念、特點和應用方法,使大家對存儲過程有了初步了解。存儲過程的廣泛應用和它訪問數(shù)據(jù)的機制使得存儲過程成為當前提倡的三層結構系統(tǒng)開發(fā)模型中數(shù)據(jù)訪問層所不可或缺的元素。希望對使用數(shù)據(jù)庫開發(fā)應用程序的程序開發(fā)者有一定的借鑒和指導作用。



  • 上一篇: 嵌入式系統(tǒng)中閃存設備I/O軟件的設計與實現(xiàn)
  • 下一篇: SAN:存儲領域的革命
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網(wǎng)友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1