用Sqlhelper类简化数据访问示例

当我们进行 .NET应用程序数据访问代码的设计和开发时,事实上总是在重复编写创建连接、设置

命令对象、读取数据等一系列相同的数据访问代码,如果我们将这一系列的常用的操作都封装到一

个类中,使用时只需提供一些必要的参数,便可以在一行代码中完成相关的操作,从而起到简化数

据访问、提高编码效率的作用。

微软提供的Data Access Application Block for .Net就是将数据访问的最佳经验封装到

Sqlhelper类中的一系列静态方法中,你可以很方便地将其作为.Net应用程序的一部分,只需少量

的代码就可完成数据访问的操作,既使得程序代码的层次更加分明,同时也减少了创建、测试和维

护自定义代码的数量。

 

下面通过示例说明利用Sqlhelper类进行数据访问的方法:

一、 建立示例数据库

在Microsoft SQL Server Express 2005中建立数据库TstSqlhelper。

1、 数据表TstStu结构:

 

(图2 :数据表TstStu结构,Id设为主键)

2、 存储过程:

1)ALTER PROCEDURE TstSelect

        @Name nvarchar(8)

AS

        select TstStu.Name,TstStu.Chinese from TstStu where TstSTu.Name=@Name

RETURN

2)ALTER PROCEDURE TstInsert

       @Id nvarchar(4),@Name nvarchar(8),@Sex nvarchar(2),@Chn float

AS

        Insert Into TstStu(TstStu.Id,TstStu.Name,TstStu.Sex,TstStu.Chinese)

            Values(@Id,@Name,@Sex,@Chn)

   RETURN

3)ALTER PROCEDURE TstUpdate

        @Id nvarchar(4),@Chn float

AS

        update TstStu set TstStu.Chinese=@Chn  where TstStu.Id=@Id

  RETURN

4) ALTER PROCEDURE TstDelete

        @Id nvarchar(4)

AS

         delete from TstStu  where TstStu.Id=@Id

  RETURN

二、 建立示例程序:

在Microsoft Visual Studio.Net 2005中建立一个网站项目WebSite2,在App_Data中添加

TstSqlhelper数据库文件,App_Code中添加Sqlhelper.cs,在web.config中建立数据库连接字符串

 

在Default.aspx页面中引入Sqlhelper类的名字空间

using Microsoft.ApplicationBlocks.Data;

并加入以下控件:

控件名 ID Text属性 说明

GridView GridView1 --- 显示数据

Button Button1 示例一 测试ExecuteScalar方法

Button Button2 示例二 测试ExecuteDataset方法

Button Button3 示例三 测试ExecuteNonQueryTypedParams方法

Button Button4 示例四 测试FillDataset方法

Button Button5 示例五 测试CreateCommand、UpdateDataset方法

(表1:控件设置一览表)

三、 Sqlhelper类调用示例说明:

……

public static string ConnStr=

ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;//读取连接字符串

……

protected void Button1_Click(object sender, EventArgs e)

    {

        // 测试ExecuteScalar方法示例,返回输出了表TstStu中的记录数

int Count = (int)SqlHelper.ExecuteScalar(ConnStr, CommandType.Text,

"select count(*) from TstStu");

        Response.Write(Count.ToString());

}

这里调用的ExecuteScalar方法的原型是:

ExecuteScalar(string connectionString, CommandType commandType, string commandText)

作用是返回一个值,该值始终是该命令返回的第一行的第一列,这里我们返回输出了表TstStu中的

记录数。

在Sqlhelper类中与此方法类似的还有:

ExecuteNonQuery。方法用于执行不返回任何行或值的命令,这些命令通常用于执行数据库更新,

但也可用于返回存储过程的输出参数。

ExecuteReader方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。

ExecuteDataset方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。

ExecuteXmlReader方法返回 FOR XML 查询的 XML 片段。

除此之外,Sqlhelper类中每种静态方法都提供了一组一致的重载,它们都支持不同的方法参数,

开发人员可根据具体需要确定要传递连接、事务和不同的参数信息和方式。

例如:

protected void Button2_Click(object sender, EventArgs e)

    {

        // 测试ExecutDataset方法传递“存储过程”参数的示例,返回Name为“张三”的记录

SqlParameter sp_Para1=new SqlParameter("@Name",SqlDbType.NVarChar);

        sp_Para1.Value="张三";

        GridView1.DataSource = SqlHelper.ExecuteDataset(ConnStr, "TstSelect",

sp_Para1);

        GridView1.DataBind();

 }

在开发数据库相关的应用程序时,我们常常使用的DataTable等对象中的数据行来操作数据库,为

了简化这一过程,Sqlhelper类中为我们提供了一系列的相关操作方法:

ExecuteNonQueryTypedParams 方法使用数据行而不是参数来执行非查询操作。

ExecuteDatasetTypedParams 方法使用数据行而不是参数来执行 DataSet 创建操作。

ExecuteReaderTypedParams 方法使用数据行而不是参数来返回数据读取器。

ExecuteScalarTypedParams 方法使用数据行而不是参数来返回标量。

ExecuteXmlReaderTypedParams 方法使用数据行而不是参数来执行 XmlReader。

例如:

protected void Button3_Click(object sender, EventArgs e)

    {

        // 测试ExecuteNonQueryTypedParams方法,将DataTable中的一行数据做为存储过程的参

数,向表

// TstStu中插入一条记录

DataTable dt = new DataTable("mydt");

        dt.Columns.Add("Id", typeof(String));

        dt.Columns.Add("Name", typeof(String));

        dt.Columns.Add("Sex", typeof(String));

        dt.Columns.Add("Chn", typeof(Double));

        DataRow dr;

        dr = dt.NewRow();

        dr["Id"] = "C004";

        dr["Name"] = "马六";

        dr["Sex"] = "男";

        dr["Chn"] = 68;

        dt.Rows.Add(dr);

        SqlHelper.ExecuteNonQueryTypedParams(ConnStr, "TstInsert", dr);

        Page_Load(sender, e); 

  }

这里调用的ExecuteNonQueryTypedParams方法的原型是:

ExecuteNonQueryTypedParams(string connectionString, string spName, DataRow dataRow)

其中spName是存储过程名。

 DataSet是ADO.NET中的一个核心组件,它的强大功能受到众多程序员的青睐,但对DataSet进行

数据填充和用DataSet更新数据库也是比较烦琐的操作,而Sqlhelper类为我们提供的两个相关的静

态方

法,正好简化了DataSet的使用。

   protected void Button4_Click(object sender, EventArgs e)

    {

        // 测试FillDataset方法,查询Name是“李四”的记录

DataSet ds = new DataSet();

        SqlHelper.FillDataset(ConnStr, "TstSelect", ds, new string[] { "TstStu" }, "李

四");

        GridView1.DataSource = ds;

        GridView1.DataBind();

    }

   这里调用的FillDataset方法的原型是:

FillDataset(string connectionString, string spName, DataSet dataSet,string[]

tableNames, params object[] parameterValues)

 (注:参数string[] tableNames可以是多个表名,在此我们只使用了单表。)

  protected void Button5_Click(object sender, EventArgs e)

    {

        // 测试CreateCommand、UpdateDataset方法,将DataSet的数据更新提交到数据库

DataSet ds = new DataSet();

        SqlHelper.FillDataset(ConnStr, CommandType.Text, "select * from TstStu",ds,

 new string[] { "TstStu" }); 填充DataSet

DataRow rowToInsert, rowToUpdate, rowToDelete;

        // 插入一条记录

rowToInsert = ds.Tables[0].Rows.Add(new Object[] {"C005", "陈七", "男", 92 });

        // 更新第二条记录,给Chinese字段加10

rowToUpdate = ds.Tables[0].Rows[1];

        rowToUpdate["Chinese"] = (double)(rowToUpdate["Chinese"]) + 10.0;

       

        // 删除第三条记录

rowToDelete = ds.Tables[0].Rows[2];

        rowToDelete.Delete();

        GridView1.DataSource = ds;

        GridView1.DataBind();

        // 手动建立更新逻辑

SqlCommand InsertCmd = SqlHelper.CreateCommand(new SqlConnection(ConnStr),"TstInsert",

"Id","Name", "Sex", "Chinese");

        SqlCommand DeleteCmd = SqlHelper.CreateCommand(new SqlConnection(ConnStr),

"TstDelete", "Id");

SqlCommand UpdateCmd = SqlHelper.CreateCommand(new SqlConnection(ConnStr),

"TstUpdate", "Id", "Chinese");

       

        // 将DataSet的数据更新提交到数据库

        SqlHelper.UpdateDataset(InsertCmd, DeleteCmd, UpdateCmd, ds, "TstStu");

    }

    这里调用的CreateCommand方法的原型是:

    public static SqlCommand CreateCommand(SqlConnection connection, string spName,

params string[] sourceColumns)

      (注:这里的connection是连接对象而不是连接字符串,spName为存储过程名,

sourceColumns是数组参数类型)

      UpdateDataset方法的原型是:

      public static void UpdateDataset(SqlCommand insertCommand, SqlCommand

deleteCommand,

 SqlCommand updateCommand, DataSet dataSet,

string tableName)

除以上示例提到的方法外,Sqlhelper类中还提供了一些数据访问操作的辅助函数,限于篇幅在此

不再繁述,有兴趣的读者可阅读Sqlhelper.cs源码及参考相关资料。事实上,由于Sqlhelper类是

开源的,我们在实际开发中完全可以根据需要对其进行修改和扩充,以进一步简化我们的数据访问

操作。

运行环境:Windows XP-sp2+Visual Studio.NET 2005+SQL Server 2005 Express

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值