浅析VS .NET中两种创建存储过程的方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅析中两种创建存储过程的方法
摘要:本文主要介绍了Visual Studio .NET中创建SQL Server存储过程的两种方法。
以实现数据加密功能为例,重点阐述了如何利用C# .NET语言来创建复杂存储过程的方法和步骤。
最后,对这两种方法进行了分析和比较,并指出了各自的适用场合。
关键词:C #.NET;存储过程;数据加密
0 引言
存储过程是数据库中的一个重要对象,它是一组为了完成某个特定功能的程序语句集,经编译后存储在数据库中。
当需要使用该功能时,用户只需通过指定存储过程的名字并给出相应的参数(如果该存储过程带有参数)来执行它。
传统方式下,开发人员采用T-SQL脚本来创建存储过程。
然而,在Visual Studio 2005及更高版本的集成开发环境(以下统称为VS .NET)中,SQL Server 已经完全支持.NET通用语言运行时(CLR)。
这意味着,可以使用.NET高级语言(如C# .NET、VB .NET)来开发存储过程、函数和触发器等数据库对象。
相比传统方式而言,SQL Server和CLR的集成具有许多优点,如实时编译、类型安全、增强的安全性以及增强的编程模型等。
本文主要介绍了在VS .NET中创建SQL Server存储过程的两种方法,重点阐述了如何利用C# .NET语言来创建具有数据加密功能的存储过程的方法和步骤。
同时,对这两种方法进行了分析和比较,并指出了各自的适用场合。
1 创建SQL Server存储过程的两种方法
在VS .NET中,主要有以下两种创建SQL Server存储过程的方法:
1.1 利用T-SQL脚本语言创建存储过程
可以使用CREATE PROCEDURE命令来创建存储过程,其语法规则如下:
CREATE PROC [EDURE] procedure_name [;number] --存储过程名
[ {@parameter data_type} --参数的类型
[ V ARYING ] [ =default ] [ OUTPUT ] ] --参数的属性
[ , … m]
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE, E
NCRYPTION }] --处理方式
[ FOR REPLICATION ]
AS sql_statement [ … n ]--执行的操作
例如,创建一个存储过程,要求验证用户名userName和密码userPwd 的匹配性。
匹配则返回用户编号userID,否则返回0。
脚本如下:
Create Procedure uspValidateUser
@UserName varchar,
@UserPwd varchar,
@UserID int OUTPUT
As
Declare @UserNo int
Select @UserNo=userID
From Users
Where userName=@UserName And userPwd=@UserPwd
If @UserNo null
@UserID=@UserNo
Else
@UserID=0
1.2 利用.NET高级语言创建存储过程
在SQL Server 2005及其更高版本中,数据库系统已经完全支持.NET通用语言运行时。
换句话说,可以使用诸如C#.NET或VB .NET等高级语言来开发存储过程、函数和触发器等数据库对象。
有关如何利用.NET高级语言来创建存储过程的方法和步骤,将在下一
节具体阐述。
2 利用C# .NET语言实现加密存储过程
本节将以Visual Studio 2008开发环境为例,利用C# .NET语言实现一个存储过程uspHashEncrypt。
该存储过程包含一个参数用户密码userPwd,其功能是对用户密码作加密处理后再保存到数据表中,从而实现密码的安全性。
步骤如下:
1)启动Visual Studio 2008,新建项目,项目类型为数据库,模板为SQL Server项目,输入项目名称HashEncrypt。
2)新建/选择数据库引用。
如果是初次使用,可以根据提示新建一个数据库引用;否则,可直接选择一个已经存在的数据库引用。
3)依次选择项目→添加新项→存储过程,输入名称uspHashEncrypt,单击添加按钮。
4)编码实现。
部分关键代码如下:
SqlConnection myConn = new SqlConnection();
myConn.Open();
SqlCommand myCmd = new SqlCommand();
SHA1Managed mySHA1 = new SHA1Managed();
//采用SHA1加密处理
UnicodeEncoding myEncode = new UnicodeEncoding();
Byte[] txtBytes = myEncode.GetBytes(userPwd);
Byte[] hashedPwd = puteHash(txtBytes);
string strHash = Convert.ToBase64String(hashedPwd);
//加密后的字符串
string strInsert=“Insert Users(userPwd)Values(@HashString
)”;
myCmd.Connection = myConn;
mandText = strInsert;
myCmd.Parameters.Add(new SqlParameter(“@HashString”, SqlDbType.NVarChar,100));
myCmd.Parameters[0].Value=strHash;
myCmd.ExecuteNonQuery();
5)编译部署。
按F5开始启动调试,如果没有错误,则可右击项目名称,点击部署即可。
进入SQL Server管理平台,可以看到存储过程创建成功,如图1所示。
图1 存储过程成功部署到SQL Server服务器中
由于SQL Server 2005内嵌.NET的操纵代码,而且这些代码是二进制的,因此其执行速度比T-SQL语句快得多。
3 两种方法的分析与比较
从以上介绍可以看出,利用.NET高级语言创建存储过程有许多优点,如更强的程序设计逻辑、更高的安全性以及更快的执行速度等。
然而,.NET语言并不能完全替代T-SQL语言。
表1对这两者进行了比较:
一般地,对于纯粹的数据访问,如基本的数据访问增加、修改、删除和查询操作,用T-SQL脚本语言比较合适。
对于复杂的业务逻辑、面向对象分析设计、结构化处理和网络等,采用.NET高级语言比较合适。
4 结束语
本文首先介绍了VS .NET环境中两种创建存储过程的方法,然后通过实例阐述了如何利用C#语言来创建具有数据加密功能的存储过程的方法和步骤。
最后,从多个方面对这两种方法进行了比较,并指出了各自的适用场合。
参考文献:
[1] Bipin Joshi. Creating SQL Server Stored Procedures using C#[EB/OL]. /articles/70eff218-3da0
-4f6f-8f8d-eeea65193f2c.aspx, 2007.
[2] 陈晓姗.SQL Server存储过程浅析[J].计算机与网络,2009(36
):170-172.
[3] 亓文娟.对SQL Server存储过程的研究与应用[J].廊坊师范学院学报(自然科学版), 2010, 10(6): 34-37.
[4] 张蒲生.数据库应用技术SQL Server 2005提高篇[M].北京:机械工业出版社, 2008.
基金项目:江西省自然科学基金项目2010GQS0165,江西省教育厅青年科学基金项目GJJ11249。