使用C#创建SQL Server的存储过程

上传人:工**** 文档编号:423332914 上传时间:2023-01-28 格式:DOCX 页数:8 大小:75.73KB
返回 下载 相关 举报
使用C#创建SQL Server的存储过程_第1页
第1页 / 共8页
使用C#创建SQL Server的存储过程_第2页
第2页 / 共8页
使用C#创建SQL Server的存储过程_第3页
第3页 / 共8页
使用C#创建SQL Server的存储过程_第4页
第4页 / 共8页
使用C#创建SQL Server的存储过程_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《使用C#创建SQL Server的存储过程》由会员分享,可在线阅读,更多相关《使用C#创建SQL Server的存储过程(8页珍藏版)》请在金锄头文库上搜索。

1、翻译使用 C#创建 SQL Server 的存储过程(Visual Studio 2005 + SQL Server 2005)原文发布日期:2007.06.17作者:Bipin Joshi翻译: webabcd介绍通常,开发人员使用的是T-SQL来创建SQL Server的存储过程、函数和触发器。而现在的SQL Server 2005已经完全支持.NET通用语言运行时(CLR) 了。这就意味着,你可以使用.NET的语言,如C#、VB.NET之类的来开发SQL Server的存储过程、函数和触发器。SQL Server和CLR的集成给我们 带来了 n 多好处,如实时编译、类型安全、增强的安全性

2、以及增强的编程模型等。 本文中,我将向大家演 示如何使用C#创建SQL Server的存储过程。背景我们在使用SQL Server存储过程时,最常做的工作就是从数据库中读取或保存数据。其常用应用如下: 执行一些简单的逻辑,没有任何返回值。也没有输出参数。执行一些逻辑,并通过一个或更多的输出参数返回结果。执行一些逻辑,并返回从表中读取的一条或多条记录。执行一些逻辑,并返回一行或多行记录。这些记录不是从表中读取的,而是你自定义的一些数据行。为了演示如何用C#开发出这几种应用的SQL Server存储过程,我将一个一个地举出示例。启用 CLR 集成在你开始用C#写存储过程之前,必须要启用你的SQL

3、Server的CLR集成特性。默认情况它是不启用 的。打开你的SQL Server Management Studio并执行如下脚本。sp_c on figure clr en abled, 1GORECONFIGUREGO这里,我们执行了系统存储过程“sp_configure”,为其提供的两个参数分别为:“clr enabled”和“1”。如 果要停用CLR集成的话也是执行这个存储过程,只不过第二个参数要变为“0”而已。另外,为了使新的设 置产生效果,不要忘记调用“RECONFIGURE”。SQL Server 项目现在打开Visual Studi o,并从文件菜单中选择新建项目”。在新建项

4、目对话框中选择“Visual C#”下 的“Database”。然后选择“SQL Ser ve r项目”模板。Project types:Busin ess Int 胡 igence Proj ects+j-Visual Basici)-Visual:WindowsE- Smart DeviceTemplates:Visual Studic in stalled templates 屈 5QL Server ProjectMy Templates.JjJ Search Online Templat亡s,“Database-Starter Kits4 Other Project Types起好项

5、目名称后就单击“确定”按钮。很快,你所创建的项目就要求你选择一个SQL Server数据库。按照提示一步一步地做就好了,就算你选择了取消,也可以在项目-属性”对话框中再一次选择数据库。 举个例子,假如你的电脑上有一个Northwind数据库,那么就在新建数据库引用”对话框中选中它,然后 单击确定”按钮。之后,SQL Server项目在部署的时候就会将我们开发的存储过程写入这个数据库(继 续往后看你就清楚是怎么回事了)。接下来,右键单击你新建的这个项目,选择 添加”- 存储过程”。 然后将会出现如下图所示的对话框:Templates7.User-Defined Function Aggregat

6、eVisual Studio installed templatesStored Pro匚Edur亡JlTriqqerMy Templates._.j Search Onlrne Templates.选择“存储过程”模板,并起一个合适的名字,然后单击“添加”按钮。添加完后你就会发现,实际上这是创建了一个已经导入了需要用到的命名空间的类。using System;using System.Data;using System.Data.SqlClie nt;using System.Data.SqlTypes;using Microsoft.SqIServer.Server;注意一下加粗显示的命名

7、空间(译者注:后两个using)。System.Data.SqlTypes命名空间包含了很 多不同的类型,它们可以用来代替SQL Ser ve r的数据类型。Mic rosoft.SqlSe rve r.Se rve r命名空间下 的类负责SQL Server的CLR集成。没有返回值的存储过程 在这一节中,我们将会看到如何写一个执行了一些逻辑,但是却没有任何返回值和输出参数的存储过程。在 这个例子里,我们将创建一个名为“ChangeCompanyName”的存储过程,它用来修改Customers表中 CompanyName字段的值。这个存储过程需要两个参数- CustomerID (需要更改公

8、司名称的客户的ID)和CompanyName (新的公司名称)。“ChangeCompanyName”存储过程完成后的代码如下: SqlProcedurepublic static void ChangeCompanyName(SqlStri ng CustomerID, SqlStri ng Compa ny Name)日田SqlC onn ecti on cnn = new SqlC onn ecti on(c on text conn ectio n=true);cnn. Ope n();SqlComma nd cmd = new SqlComma nd(); cmd.C onn ect

9、io n = cnn;cmd.Comma ndText = update customers set compa nyn ame=p1 where customerid = p2;SqlParameter p1 = new SqlParameter(p1, Compa ny Name);SqlParameter p2 = new SqlParameter(p2, CustomerID); cmd.Parameters.Add(p1);cmd.Parameters.Add(p2);int i=cmd.ExecuteN on Query();I cnn.Close();I SqlContext.P

10、ipe.Send(i.ToString();仔细看一下这个ChangeCompanyName()方法。它是一个静态方法并且没有返回值(void)。它需 要两个名为CustomerID和CompanyName的参数。请注意这两个参数的数据类型都是SqlString。SqlString可以用来代替SQL Server中的nvarchar数据类型。这个方法用了一个SqlProcedure属 性来修饰。该属性用于标记ChangeCompanyName()方法是一个SQL Server存储过程。在方法内我们创建了一个SqlConnection对象,并设置其连接字符串为“context connectio

11、n = true。“上下文连接”可以让你使用当前登录到数据库的用户作为你的登录数据库的验证信息。 本例中,ChangeCompanyName()方法将会转换为存储过程,然后保存到Northwind数据库里。所以在这里的 上下文连接”指的就是Northwind数据库。这样你就不需要再写任何关于登录数据库的验证信息了。接下来是打开数据库连接。然后通过设置SqlCommand对象的Connection和CommandText属性, 让其执行更新操作。同时,我们还需要设置两个参数。这样通过调用ExecuteNonQuery()方法就可以 执行更新操作了。 再接下来就是关闭连接。最后,将ExecuteN

12、onQuery()方法的返回值发送到客户端。当然你也可以不做这一步。现在我们来了 解一下SqlContext类的使用。SqlContext类用于在服务端和客户端之间传递处理结果。本例使用了 Send()方法发送一个字符串返回给调用者。返回从表中读取的一条或多条记录的存储过程我们在使用存储过程时,经常会SELECT 一条或多条记录。你可以采用两种方法来创建这样的存储过程。首先我们创建一个名为GetAllCustomers()的方法,代码如下:SqlProcedurepublic static void GetAllCustomers()日田SqlC onn ecti on cnn = new S

13、qlC onn ecti on(c on text conn ectio n=true);cnn. Ope n();SqlComma nd cmd = new SqlComma nd();cmd.C onn ectio n = cnn;cmd.Comma ndText = select * from customers;SqlDataReader reader = cmd.ExecuteReader();SqlC on text.Pipe.Se nd(reader);reader.Close();I cnn.Close();这个GetAllCustome rs()方法用了一个SqlP roce

14、du re属性来修饰。在方法内创建一个 SqlConnection和一个SqlCommand对象。然后使用ExecuteReader()方法来执行SELECT语句。接 下来用Send()方法将取得的SqlDataReader数据发送到客户端。最后就是关闭SqlDataReader和 SqlConnection。 在这种方法中,是我们自己创建的 SqlDataReader。 其实,我们也可以把这个任务 交给SqlContext类去完成,代码如下:SqIProcedurepublic static void GetCustomerBylD(SqIStri ng CustomerlD)曰田SqlC

15、onn ecti on cnn = new SqlC onn ecti on(c on text conn ecti on=true);cnn. Ope n();SqlComma nd cmd = new SqlComma nd();cmd.C onn ecti on = cnn;cmd.Comma ndText = select * from customerswhere customerid = p1;SqlParameter p1 = new SqlParameter(p1, CustomerID); cmd.Parameters.Add(p1);SqlC on text.Pipe.ExecuteA ndSe nd(cmd);cnn .Close();GetCustomerBylD()方法需要一个参数 -CustomeHD,它将从Customers表中返回某个customer 的记录。这个方法内的代码,除了 ExecuteAndSend()方法外,你应该都已经比较熟悉了。 ExecuteAndSend()方法接收一个SqlCommand对象作为参数,执行它就会

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号