新聞中心
CLR存儲過程不是很容易理解的,筆者用簡單的語言對CLR存儲過程進行了詳細的描述,不僅僅從理論,也從實現(xiàn)方法上對其進行了講述,希望對你有所幫助。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設、扎蘭屯網(wǎng)站維護、網(wǎng)站推廣。
在 SQL Server 2005 中,可以在SQL Server實例中使用以下方法創(chuàng)建數(shù)據(jù)庫對象:基于 Microsoft .NET Framework 公共語言運行時 (CLR) 創(chuàng)建中的程序集使用編程方法創(chuàng)建。能夠利用由CLR提供的眾多編程模型的數(shù)據(jù)庫對象包括觸發(fā)器、存儲過程、函數(shù)、聚合函數(shù)和類型。
雖然Transact-SQL是專門為數(shù)據(jù)庫中的直接數(shù)據(jù)訪問和操作而設計,但是它沒有提供編程構造來使數(shù)據(jù)操作和計算更加容易。例如,Transact-SQL 不支持數(shù)組、集合、for-each 循環(huán)、位轉移或類。
CLR存儲過程提供面向對象的功能,例如封裝、繼承和多態(tài)性?,F(xiàn)在,相關代碼可以很容易在類和命名空間中進行組織。在使用大量服務器代碼時,這樣可以更容易地組織和維護代碼,通過使用托管代碼而實現(xiàn)某些數(shù)據(jù)庫功能。
對于計算和復雜的執(zhí)行邏輯,基于CLR的托管代碼比Transact-SQL 更適合,托管代碼的一個優(yōu)點是類型安全性,它全面支持許多復雜的任務,包括字符串處理和正則表達式。
通過 .NET Framework 庫中提供的功能,可以訪問數(shù)千個預生成的類和例程??梢院苋菀讖娜魏未鎯^程、觸發(fā)器或用戶定義函數(shù)進行訪問?;悗彀ǖ念愄峁┯糜谧址僮鳌⒏呒墧?shù)學運算、文件訪問、加密等的功能。
對于幾乎或根本不需要過程邏輯的數(shù)據(jù)訪問,還是使用 Transact-SQL。對于具有復雜邏輯的CPU密集型函數(shù)和過程最好還是使用托管代碼。
我們看如何在Visual Studio 2005中創(chuàng)建基于SQL Server 2005的CLR存儲過程:
我們打開Visual Studio 2005,在對應數(shù)據(jù)庫欄目下面有個SQL Server項目,新建立一個項目,命名為StoredStu,確定過后會顯示一個數(shù)據(jù)庫連接對話框,數(shù)據(jù)庫連接好后,我們在數(shù)據(jù)庫中有如下兩個表,如下:
StuInfo(學生信息表)
Nation(民族表)
新建立一個文件,選擇“存儲過程”的選項,命名為StoredStu,在文件中寫入以下的代碼:
- using System;
- using System.Data;
- using System.Data.SqlClient;
- using System.Data.SqlTypes;
- using Microsoft.SqlServer.Server;
- public partial class StoredProcedures
- {
- [Microsoft.SqlServer.Server.SqlProcedure]
- public static void StoredStu()
- {
- // 在此處放置代碼
- SqlPipe sp = SqlContext.Pipe;
- string sql = "Select * from StuInfo";
- using (SqlConnection conn = new SqlConnection
- ("context connection=true"))
- {
- conn.Open();
- SqlCommand cmd = new SqlCommand();
- cmd.CommandType = CommandType.Text;
- cmd.Connection = conn;
- cmd.CommandText = sql;
- SqlDataReader rdr = cmd.ExecuteReader();
- sp.Send(rdr);
- }
- }
- [SqlProcedure]
- public static void GetStuInfo(string strNationCode)
- {
- string sql = "select Stu.StudentName, Stu.StudentNo,
- Stu.StudentUniversity,Na.NationName from StuInfo Stu inner join
- Nation Na on Stu.NationCode = Na.NationCode where
- Stu.NationCode = '" + @strNationCode + "'";
- using (SqlConnection conn = new SqlConnection
- ("context connection=true"))
- {
- conn.Open();
- SqlPipe sp = SqlContext.Pipe;
- SqlCommand cmd = new SqlCommand();
- cmd.CommandType = CommandType.Text;
- cmd.Connection = conn;
- cmd.CommandText = sql;
- SqlParameter paramstrNationCode =
- new SqlParameter("@strNationCode", SqlDbType.VarChar, 11);
- paramstrNationCode.Direction = ParameterDirection.Input;
- paramstrNationCode.Value = strNationCode;
- cmd.Parameters.Add(paramstrNationCode);
- SqlDataReader rdr = cmd.ExecuteReader();
- sp.Send(rdr);
- }
- }
- };
現(xiàn)在我們先對其進行編譯,在“生成”菜單中選擇“生成解決方案”,當編譯完工程后,就需要為其進行部署了。同樣選擇“生成”菜單中的“部署解決方案”, 這樣就會自動將寫好的存儲過程部署到 SQL Server 2005 中去。
為了確保SQL可以執(zhí)行托管代碼,我們還需要在SQL Server 2005中,執(zhí)行下面的語句:
- EXEC sp_configure "clr enabled", 1;
- RECONFIGURE WITH OVERRIDE;
- GO
執(zhí)行顯示的結果如下:
“配置選項'clr enabled' 已從0 更改為1。請運行RECONFIGURE 語句進行安裝?!?/p>
這樣就可以創(chuàng)建好CLR存儲過程了。
新聞標題:淺析基于SQL2005的CLR存儲過程
網(wǎng)站鏈接:http://m.5511xx.com/article/cdecheg.html


咨詢
建站咨詢
