首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> 数据库教程
使用sql server 2005中的clr集成_数据库技巧
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

“最近碰到点事”
“啥”
“想往数据库连续的插入一批数据”
“那就插啊,看你愁的”
“可是没办法写一个这样的存储过程啊。我不会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 :)


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


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·jsp留言板源代码4-JSP教程,数据库相关
·“脱衣秀”泛滥 四川打击淫秽色情视频聊天室
·c#中使用 crystal reports (水晶报表)的打包和部署问题-.NET教程,报表/图形/Office
·MDAC2.8 下载!-ASP教程,数据库相关
·数据库安装包的制作(参考MSDN)-.NET教程,安装和部署
·asp讲座之七:asp与数据库(二)
·深度和广度优先分油问题(C#实现)-.NET教程,C#语言
·C#在状态栏中,自绘进度条,-.NET教程,C#语言
·怎么清除sql server日志
·C#中的接口-.NET教程,C#语言
最新文章
·sql server 2005 ce基础概要_数据库教程
·用flash as代码制作按钮弹出窗口_flash教程
·alexa:戏曲性地调整_alexa排名
·google也推出域名注册_google推广
·技巧总结:div中class与id的区别及应用_css教程
·windows vista命令runas.exe全解析_windows vista
·photoshop将美女照片处理成仿古斑驳油画_photoshop教程
·百度主题推广代码的完全解析-知己知彼_网赚技巧
·你的google adsense帐号是否被人盗用?_网赚技巧
·如何挑出google adsense中单价极低的广告商_网赚技巧
相关主题
  • 使用sql语句获取sql server数据库登录用户权限_数据库技巧
  • 使用sqlserver的扩展存储过程实现远程备份与恢复_delphi教程
  • 使用SqlDataReader读取数据示例-.NET教程,数据库应用
  • 使用SQL存储过程要特别注意的问题-注意顺序读取-数据库专栏,SQL Server
  • 使用SQL语句取消SQL Server数据库登录用户权限-数据库专栏,SQL Server
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭