本章的内容是介绍DataQuicker2(以下DQ2)中存储过程的操作。其实以我的理解,DQ2把存储过程也给实体化了,本篇应该算是上一篇的遗补吧。
在DQ2中,对储存过程的操作是封装好了的,结合代码生成器,可以很方便的执行存储过程。为了让大家能更能够体会的DQ2的简洁,就先看看一个比较常用的操作存储过程的操作方法。
比如,我们定义个个存储过程如下:
@CategoryName nvarchar(30) ,
@Description ntext ,
AS
INSERT INTO Categories(
[CategoryName],[Description]
)VALUES(
@CategoryName,@Description
)
GO
为了能够很方便的操作存储过程,还需要定义一些操作函数,如:
2 {
3 using (SqlConnection connection = new SqlConnection(connectionString))
4 {
5 int result;
6 connection.Open();
7 SqlCommand command = BuildIntCommand(connection,storedProcName, parameters );
8 rowsAffected = command.ExecuteNonQuery();
9 result = (int)command.Parameters["ReturnValue"].Value;
10 return result;
11 }
12 }
2 {
3 int rowsAffected;
4 SqlParameter[] parameters = {
5 new SqlParameter("@CategoryName", SqlDbType.NVarChar),
6 new SqlParameter("@Description", SqlDbType.NText) };
7 parameters[0].Value = model.CategoryName;
8 parameters[1].Value = model.Description;
9 DbHelperSQL.RunProcedure("Categories_ADD",parameters,out rowsAffected);
10 return (int)parameters[0].Value;
11 }
2 {
3 public Categories()
4 {}
5 Model Model
43 }
44
使用的时候需要把model对象传入ADD方法就好了。
==========
特别声明:以上代码片断采用李天平老兄的动软代码生成器生的,没有经过调试。这里列出只是为了显示传统的存储过程的使用模式而已。如果只是对数据库作一些简单的操作,动软.NET代码生成器是一个不错的选择。
==========
下面看看同样的存储过程,要使用DQ2操作这个简单的储存过程的步骤:
使用代码生成器,选择存储过程实体代码生成。其他操作基本同上一讲。值得注意的是,每一个存储过程会被转换为单独的类,然后参数转换为对应的属性。
2using System.Text;
3using System.Collections.Generic;
4using DataQuicker2.Framework;
5
6namespace DataQuicker2.Demo
7{
8 /// <summary>
9 /// 存储过程类Categories_ADD。<br />
10 /// Store procedure class Categories_ADD.
11 /// </summary>
12 public class Categories_ADD : StoreProcedure
13 {
14 Store Procedure Parameters
51
52 /// <summary>
53 /// 构造存储过程对象GetPostList。<br />
54 /// Construct store procedure instance GetPostList.
55 /// </summary>
56 public Categories_ADD() : base() { }
57
58 /// <summary>
59 /// 绑定实体对象与数据库对象。<br />
60 /// Bind entity instance to database.
61 /// </summary>
62 protected override void Bind()
63 {
64 this.BindStoreParameterName("Categories_ADD");
65
66 this.BindParameter(this.categoryName, "CategoryName");
67
68 this.BindParameter(this.description, "Description");
69 }
70 }
71}
72
使用的代码如下
2 {
3 Categories_ADD add = new Categories_ADD();
4 add.CategoryName ="DataQuicker2";
5 add.Description = "数据处理的好助手";
6 add.ExecuteNonQuery(DbConn);
7 }
就完成了存储过程的调用,其他工作,DQ2已经在后台做好了,是不是很简单。-_-! ,不知不觉,又偏题了。
其实DQ2的存储过程操作很简单,只涉及到几个函数:
/// 执行存储过程
ExecuteNonQuery
/// 执行存储过程,返回结果的第一行第一列单元格的结果。
ExecuteScalar
/// 执行查询返回数据集。
Fill
/// 返回阅读器对象。
GetDataReader //DataQuicker2
以上四个函数都有两个或者以上的重载版本,例如ExecuteNonQuery
2 /// 执行存储过程。当数据链接字符串名称为Default时使用
3 /// </summary>
4 ExecuteNonQuery();
5
6 /// <summary>
7 /// 执行存储过程。
8 /// </summary>
9 /// <param name="connection">数据库链接对象</param>
10 ExecuteNonQuery(IDbConnection connection);
11
12 /// <summary>
13 /// 执行存储过程。
14 /// </summary>
15 /// <param name="transaction">事务处理对象,请保证数据库已经打开</param>
16 ExecuteNonQuery(IDbTransaction transaction);
17
18
其他三个函数和ExecuteNonQuery很类似。就不一一SHOW出来了。有兴趣的朋友可以看看代码文件。
因为这一节很简单,所以没有准备相应的DEMO,在全文完成的时候,我尽量作一个完整的DEMO提供给大家下载。
DataQuicker2已经升级到0.8.8版,为StoreProcedure类增加了GetDataReader及相关的重载版本
下载地址
http://lovinger2000.cnblogs.com/archive/2006/04/02/DataQuicker2Package.html