分享
 
 
 

使用SQL Server 2005中的CLR集成

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

“最近碰到点事”

“啥”

“想往数据库连续的插入一批数据”

“那就插啊,看你愁的”

“可是没办法写一个这样的存储过程啊。我不会sql的循环,而且也不能分析字符串用split取值。又不能在程序中直接拼sql语句”

“……”

“怎么那么看着我啊”

“你在用vs2005和sql2005?”

“是啊”

“来,整点新东西吧”

……

这个问题是前几天遇到的,简单描述一下:单一课程和系列课程。一个系列包括多个单一课程。存放数据的表的设计为

表:ES_RefSerailCourse

列:SerialCourseID(int) | CourseID(int)

一个SerialCourseID对应多个CourseID。操作时,创建系列,选择多个课程到一个控件(该控件可以返回用","分隔的选择的课程的编号,点击提交后创建系列,同时把生成的系列编号和课程编号插入到ES_RefSerailCourse。

这种连续插入数据的问题,以前用vs2003+sql200的时候,我是在数据访问层打开一个连接后,循化插入数据,最后关闭连接。这个办法虽然显得很笨,但是当时也没有什么好办法可以在数据库边完成循化插入数据。而现在,时代不同了,我们有了vs2005和sql2005,对于这种t-sql没法完成的任务,可以用sql2005的CLR集成功能实现。

sql2005的CLR集成,说的通俗一些就是用.net语言编写数据库应用,包括存储过程,函数,触发器等等均可。其基本的使用过程为:

1.在vs2005建立一个数据库应用项目。

2.在该项目用.net语言编写数据库应用。

3.将用.net语言编写数据库应用通过vs2005部署到sql2005。

4.实际使用中调用。

下面按照上面的顺序讲一下这个过程。(好久没有写技术文章了,如果有描述不清或错误的地方,欢迎在评论中交流)

1.在vs2005建立一个数据库应用项目。

如图所示,建立一个这样的database项目。建立后会要求你指定一个数据库连接,按照提示一步步进行就ok。建立完成后可以测试一下数据库连接。办法为:在解决方案上点右键,选Deploy(中文应该是部署?),如果状态栏提示部署成功,那就ok了,否则请检查一下数据库连接(以及……人品)。

2.在该项目用.net语言编写数据库应用。

我用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.暴露在外的数据需要使用System.Data.SqlTypes。这是自然的。

c.构造完command后,使用SqlContext.Pipe.ExecuteAndSend()执行。

(实际上,我们还是拼了sql语句,但最后的表现形式却成了一个存储过程。大部分的项目都不允许直接把sql语句写到程序中,所以,这个办法就有了用武之地。)

3.将用.net语言编写数据库应用通过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 --向 系列_课程对应表 插入数据

22 exec dbo.up_AddCoursetoSerial @SerialCourseID,@IDs

23

最后一句就是调用了我们刚才写的存储过程,接受两个参数。是不是很方便?

看到这里,相信聪明的你已经对sql2005的CLR集成有了初步的印象。如果想完全掌握这个强大的武器,最好的办法就是立刻开始自己的编写。在之前,看看msdn上对这个的介绍也会很有帮助

http://www.microsoft.com/china/msdn/library/data/sqlserver/sqlclrguidance.mspx

我也是前几天因为项目需要才接触这个,希望可以和大家一起来学这个很酷的新功能:)

好了,我的最新的一篇笔记完成了!和前一篇笔记相隔的时间大概是……一年??

but,better later than never :)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有