常常有朋友询问如何将用户输入的密码通过哈希(Hash)算法计算过后再放入数据库中,在以往笔者只能建议在应用程序端编写,现在相同的语法可以写成存储过程保存在 SQL Server 内,如程序代码列表11-2 所示。而一般的用户只需要简单地调用存储过程,就可以将密码通过 .NET Framework 提供的 SHA1 哈希算法编码后,再存入到数据表。
SqlPipe:将执行结果或信息送回前端应用程序,程序范例可以参照程序代码列表 11-1 最后两行。如果前端是通过 ADO 或 ADO.NET 对象访问 SQL Server,而我们编写的对象返回文字信息,则会被前端视为 Connection 对象的 InfoMessage 事件,范例如下。你也可以返回单一条记录或是整个数据集合。
Dim pipe As SqlPipe = SqlContext.Pipe
‘传送信息
pipe.Send(“完成事务”)
SqlDataReader:通过 SQL Server 提供的只能向前移动(forward-only)、只读(read-only)游标(Cursor)来访问数据。
Dim sdr As SqlDataReader = cmd.ExecuteReader()
While sdr.Read()
Debug.WriteLine(sdr("EmployeeID") & "-" & sdr(1))
End While
sdr.Close()
上述范例程序中通过 Read 函数逐条读出数据,直到数据记录读取完毕,Read 函数会返回 false,我们据此退出循环。
System.Transactions.Transaction:.NET Framework2.0新增了 System.Transactions 命名空间,在其内可提供新的事务管理架构与功能。若只就此处的 SQL Server 内部对象而言,你不太需要管理,因为当通过 SqlConnection 取得对象执行环境的连接时,若该连接已经有事务,则会自动加入,你可以通过 Transaction 的静态属性 Current 取得当前的事务状况,以此完成或恢复事务。范例程序如下:
Catch ex As Exception
Transaction.Current.Rollback
约略看完 ADO.NET 2.0 与创建 SQL Server 2005 对象相关的类后,我们接着来看一下,如何通过 Visual Studio 2005 建构对象。
首先在 Visual Studio 2005 新建一个新的项目,类型为“SQL Server Project”,画面如图11-2所示:
在图11-2中,左上方的“项目类型(Project Type)”中选择某个语言后,点选其下的“Database”节点,然后在右上方的“模板(Template)”选择“SQL Server Project”,在下方的“名称(Name)”字段定义项目名称后,可以通过“浏览(Browse)”按钮选择项目存放的文件路径。
图11-2 打开创建SQL Server 2005对象的项目
Visual Studio 2005 接着会让你选择要加入对哪一个数据库的引用,画面如图11-3 所示:
由于需要 Visual Studio 2005 集成开发环境帮我们部署已开发好的数据库对象到 SQL Server 2005 实例的数据库内,所以相关的连接设置必须正确。若在图11-3 设置错误,可以在进入项目后,在“解决方案资源管理器”窗口内以鼠标右键点选项目名称,通过快捷选项“属性(Properties)”,或是鼠标双击项目下的“My Project”节点,打开如图11-4 的画面,在“数据库(Database)”页签重新设置连结:
图11-3 设置对某个 SQL Server 2005 实例内数据库的引用
图11-4 设置项目部署(Deploy)对象时,所连结的数据库以及各对象的执行权限
另外,Visual Basic.NET 默认的根命名空间(Root Namespace)和程序集名称(Assembly Name)将会与项目名称相同,在部署程序集到 SQL Server 2005 时将会用到这两个名称。若你想更改根命名空间或程序集名称可以进入“应用程序(Application)”页签修改,如图11-5画面所示:
图11-5 设置项目的程序集名称或根命名空间
接着在Visual Studio 2005的项目内选取工具选单上的“项目”-“添加新项目”,打开如图11-6的对话框,在对话框内选择“Stored Procedure”项目,或于“解决方案资源管理器”内使用快捷选项,选择“新建项目(New Item)”亦可。
在图11-6 中填入适当名称后,点选“添加(Add)”按钮,以添加定义“Stored Procedure”的模板。
在此,我们创建一个存储过程,内容如上文程序代码列表 11-2 的定义。整个项目的画面至此如图11-7 所示:
图11-6 通过添加新项目对话框选择创建存储过程的模板
图11-7 程序代码中所设置的StoredProcedure名称,在部署
后将会在SQL Server Management内找到
在各对象前可以加上 System.Data.Sql 命名空间下所提供的一组 Attribute 来告知该函数的用途,同时可以通过该 Attribute 的 name 属性(Property)来告知该函数或类型创建到 SQL Server 内对象的命名。通常若不指定名称,就沿用原 .NET 函数的名称当作数据库对象的名称。
Attribute 设置的范例如下:
<System.Data.Sql.SqlProcedure(name:="WriteHashedPassword")>
编译无误后,接着通过 Visual Studio 2005 提供的“部署(Deploy)”功能,将你所写好的程序部署到SQL Server 2005,快捷选项如图11-8所示:
责任编辑:cyth