国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

使用SQL Server 2005中的CLR集成

2024-08-31 00:51:09
字體:
來源:轉載
供稿:網(wǎng)友

“最近碰到點事”
“啥”
“想往數(shù)據(jù)庫連續(xù)的插入一批數(shù)據(jù)”
“那就插啊,看你愁的”
“可是沒辦法寫一個這樣的存儲過程啊。我不會sql的循環(huán),而且也不能分析字符串用split取值。又不能在程序中直接拼sql語句”
“……”
“怎么那么看著我啊”
“你在用vs2005和sql2005?”
“是啊”
“來,整點新東西吧”
……
這個問題是前幾天遇到的,簡單描述一下:單一課程和系列課程。一個系列包括多個單一課程。存放數(shù)據(jù)的表的設計為
表:ES_RefSerailCourse
列:SerialCourseID(int) | CourseID(int)
一個SerialCourseID對應多個CourseID。操作時,創(chuàng)建系列,選擇多個課程到一個控件(該控件可以返回用","分隔的選擇的課程的編號,點擊提交后創(chuàng)建系列,同時把生成的系列編號和課程編號插入到ES_RefSerailCourse。
這種連續(xù)插入數(shù)據(jù)的問題,以前用vs2003+sql200的時候,我是在數(shù)據(jù)訪問層打開一個連接后,循化插入數(shù)據(jù),最后關閉連接。這個辦法雖然顯得很笨,但是當時也沒有什么好辦法可以在數(shù)據(jù)庫邊完成循化插入數(shù)據(jù)。而現(xiàn)在,時代不同了,我們有了vs2005和sql2005,對于這種t-sql沒法完成的任務,可以用sql2005的CLR集成功能實現(xiàn)。
sql2005的CLR集成,說的通俗一些就是用.net語言編寫數(shù)據(jù)庫應用,包括存儲過程,函數(shù),觸發(fā)器等等均可。其基本的使用過程為:
1.在vs2005建立一個數(shù)據(jù)庫應用項目。
2.在該項目用.net語言編寫數(shù)據(jù)庫應用。
3.將用.net語言編寫數(shù)據(jù)庫應用通過vs2005部署到sql2005。
4.實際使用中調用。
下面按照上面的順序講一下這個過程。(好久沒有寫技術文章了,如果有描述不清或錯誤的地方,歡迎在評論中交流)

1.在vs2005建立一個數(shù)據(jù)庫應用項目。

如圖所示,建立一個這樣的database項目。建立后會要求你指定一個數(shù)據(jù)庫連接,按照提示一步步進行就ok。建立完成后可以測試一下數(shù)據(jù)庫連接。辦法為:在解決方案上點右鍵,選Deploy(中文應該是部署?),如果狀態(tài)欄提示部署成功,那就ok了,否則請檢查一下數(shù)據(jù)庫連接(以及……人品)。

2.在該項目用.net語言編寫數(shù)據(jù)庫應用。
我用C#。這個過程和編寫普通的程序基本相同。下面是上面問題的解決程序

 

 1         /// <summary>
 2         /// 將課程加入到系列
 3         /// </summary>
 4         /// <param name="serialID">系列編號</param>
 5         /// <param name="ids">課程編號匯總</param>
 6         /// <returns></returns>
 7         [Microsoft.SqlServer.Server.SqlPRocedure]
 8         public static void up_AddCoursetoSerial(SqlInt32 serialID, SqlString ids)
 9         {
10             using (SqlConnection connection = new SqlConnection("context connection=true"))
11             {
12                 connection.Open();
13                 System.Text.StringBuilder sqlb=new System.Text.StringBuilder();
14                 string[] courseIds = ids.Value.Split(new char[] { ',' });
15                 foreach (string courseId in courseIds)
16                 {
17                     if (courseId.Length > 0)
18                     {
19                         sqlb.AppendFormat("insert into [ES_RefSerailCourse] values({0},{1}) ;", serialID, courseId);
20                     }
21                 }
22                 command = new SqlCommand(sqlb.ToString(), connection);
23                 SqlContext.Pipe.ExecuteAndSend(command);
24             }
25         }
 

a .在方法上加attribute,是什么就加什么。具體可以查SDK文檔。這樣在編譯和部署的時候vs2005就會按照你的意思來做了。
b.暴露在外的數(shù)據(jù)需要使用System.Data.SqlTypes。這是自然的。
c.構造完command后,使用SqlContext.Pipe.ExecuteAndSend()執(zhí)行。
(實際上,我們還是拼了sql語句,但最后的表現(xiàn)形式卻成了一個存儲過程。大部分的項目都不允許直接把sql語句寫到程序中,所以,這個辦法就有了用武之地。)

3.將用.net語言編寫數(shù)據(jù)庫應用通過vs2005部署到sql2005。
完成上面的工作后,對項目進行編譯,部署,方法是在解決方案上點右鍵,選...... 這個的結果是vs2005在sql2005中生成了一個存儲過程。接下來就可以到sql2005的存儲過程管理部分看一下是否多了一個名字叫“up_AddCoursetoSerial”的,如果存在,那恭喜你,一切都很完美。

4.實際使用中調用。
到這一步,就忘記這是一個用.net語言寫的存儲過程吧,該怎么用就怎么用。下面是我的實際應用:

 

 1 ALTER PROC [dbo].[ES_SerialRecordCourse_Insert]
 2  (
 3  @SerialCourseID    int out,
 4  @SerialCourseName    nvarchar(100),
 5  @Description    nvarchar(200),
 6         @IDs nvarchar(500)
 7  )
 8 AS
 9 INSERT INTO [ES_SerialRecordCourse]
10  (
11  [SerialCourseName],
12  [Description]
13  )
14 VALUES
15  (
16  @SerialCourseName,
17  @Description
18  )
19 SET @SerialCourseID=@@IDENTITY
20
21 --向 系列_課程對應表 插入數(shù)據(jù)
22 exec dbo.up_AddCoursetoSerial @SerialCourseID,@IDs
23
 

最后一句就是調用了我們剛才寫的存儲過程,接受兩個參數(shù)。是不是很方便?

看到這里,相信聰明的你已經(jīng)對sql2005的CLR集成有了初步的印象。如果想完全掌握這個強大的武器,最好的辦法就是立刻開始自己的編寫。在之前,看看msdn上對這個的介紹也會很有幫助
http://www.microsoft.com/china/msdn/library/data/sqlserver/sqlclrguidance.mspx
我也是前幾天因為項目需要才接觸這個,希望可以和大家一起來學這個很酷的新功能:)

好了,我的最新的一篇筆記完成了!和前一篇筆記相隔的時間大概是……一年??
but,better later than never :)


鏈接地址: http://notus.cnblogs.com/archive/2006/07/13/450008.html


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 景德镇市| 永年县| 漠河县| 平阳县| 莎车县| 名山县| 梧州市| 临汾市| 郸城县| 泊头市| 依安县| 旌德县| 博罗县| 绩溪县| 阿拉善盟| 德庆县| 晋州市| 巴林左旗| 台中县| 涞水县| 岑溪市| 胶南市| 阜新| 北京市| 浦东新区| 荔浦县| 清流县| 宁乡县| 汝阳县| 仁怀市| 浮山县| 进贤县| 小金县| 沾益县| 公主岭市| 潍坊市| 万荣县| 琼结县| 周至县| 安西县| 威海市|