2023年6月21日发(作者:)

SqlHelper代码、功能、用法介绍

数据访问组件SqlHelper

数据访问组件是一组通用的访问数据库的代码,在所有项目中都可以用,一般不需要修改。本节使用的是Microsoft提供的数据访问助手,其封装很严密,且应用简单。

首先要先添加一个类,并命名为SqlHelper,系统会提示是否将类放在App_Code文件夹中。此时一定要选择“是”,因为放在此文件夹下,系统会自动进行编译,程序员就可以直接使用,无需另外编译了。

SqlHelper的功能

SqlHelper的目的是从数据库获得信息或将信息保存到数据库。本实例的SqlHelper主要功能如下。

(1)执行不返回数据的T-Sql命令。例如修改会员卡信息、添加会员资料等。

(2)返回一个字段的T-Sql命令。例如获取会员卡类型的积分规则。

(3)返回一组数据。例如获取会员资料、获取所有会员卡类型等。

(4)缓存参数列表。在执行一条语句时,可能有多个参数,为了提高速度,将参数缓存。

(5)读取缓存的参数。

下面用图表的方式描述SqlHelper类的功能,如图7-16所示。

图7-16 SqlHelper功能图

小结

本文主要介绍了如何在Visual Studio 2005中新建网站项目,如何使用版本控制工具管理网站的源代码,以及母版页、导航地图和皮肤文件的使用。导航地图中以XML文件为数据源,TreeView为展现形式。除了需要在XML文件中手动填写模块功能外,其他都可以自动实现,这就是 2.0的最大好处。代码量的减少给开发人员带来了极大的便利。

SqlHelper的小知识

SqlHelper是一个微软完全开放源码的数据库操作类,用于简化你重复的去写那些数据库连接(DbConnection)啊,DbCommand,DbDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。

SqlHelper 类实现详细信息

SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。

在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用

SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。在 SqlHelper 类中实现的方法包括:

ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

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

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

ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。

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

除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在

SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置 Connection、CommandType、CommandText 和 Transaction 属性。SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括:

AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的

SqlCommand。

AssignParameterValues:该函数用于为 SqlParameter 对象赋值。

PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。

ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开

SqlDataReader 对象,以便最有效地管理与阅读器关联的连接的有效期。

执行SQL语句

引用完毕后,就可以执行SQL语句,使用SQLHelper执行SQL语句非常方便,下面代码演示了如何执行插入、删除操作。

string strsql = "insert into mynews values ('SQLHelper插入标题')"; //编写SQL语句

nQuery(strsql); //执行SQL语句

上述代码运行后,则会执行插入操作,相比于,封装后的代码更加简便易懂,删除操作代码如下所示。

string strsql2 = "delete form mynews where id=3"; //编写SQL语句

nQuery(strsql2); //执行SQL语句

当需要执行SELECT语句时,可以通过apter获取数据,示例代码如下所示。

string strsql = "select * from mynews where id=3"; //编写SQL语句

DataSet ds = apter(strsql, ,

"mydatatable");

上述代码通过apter获取数据,并创建了一个mydatatable虚拟表,填充DataSet对象。当需要获取DataSet对象中的数据时,和普通的DataSet对象一样。SQLHelper封装了中的许多方法,为开发人员提高了效率,同时也增加了安全性和模块化的特性。

注意:上述代码中的SQLHelper类能够执行的是SQL语句,如果需要执行存储过程,则需要更改SQLHelper类中的相应的CommandType属性的值。

为什么要使用数据访问层?

如果不使用数据访问层,那么你的代码里会出现很多SqlConnection、SqlCommand、SqlDataReader、Open、 Close……这些类和方法,而且代码量很大,让你不胜其烦,而且代码写起来,其实都是体力活,没有技术含量。因此我们要把数据访问层封装起来,方便重用。微软已经替我们做好了这个工作,那就是SqlHelper,下图是SqlHelper的类关系图:

下面介绍我的使用方法。

执行一个无返回值的存储过程: create proc p_Delete

@id int

as

delete table1 where id=@id

这是一个删除数据的存储过程,调用该存储过程只需要一句话:eNonQuery

(, "p_Delete", id);,这里的id是int类型,而不是SqlParameter类型。该调用是调用的public

static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)方法。以此类推。返回一个DataSet类型:eDataset (, pro, 参数列表);参数也是直接传递,无需构造SqlParameter.

使用SqlHelper

using System;

using c;

using ;

using ;

using ent;

namespace TestSQL_Project

{

public class DBPersonSqlHelper

{

private static readonly string connString = "Data Source=(local);Database=MyTest;Uid=sa;Pwd=123456";

///

/// 添加用户

///

/// 要添加的用户

public static void AddPerson(Person person)

{

string insertString = "insert into T_Person(p_name,p_age) values(@name,@age)";

SqlParameter[] cmdParameter = {

new SqlParameter("@name", r),

new SqlParameter("@age", )

};

cmdParameter[0].Value = ;

cmdParameter[1].Value = ;

try

{

eNonQuery(new SqlConnection(connString), , insertString, cmdParameter);

}

catch (Exception ex)

{

ine(ng());

}

} ///

/// 通过用户ID删除用户

///

/// 要删除的用户的ID

public static void DeletePersonByID(int id)

{

string deleteString = "delete from T_Person where p_id = @id";

SqlParameter[] cmdParameter = {

new SqlParameter("@id", )

};

cmdParameter[0].Value = id;

try

{

eNonQuery(new SqlConnection(connString), , deleteString, cmdParameter);

}

catch (Exception ex)

{

ine(ng());

}

}

///

/// 更新用户 ///

/// 要更新的用户

public static void UpdatePerson(Person person)

{

string updateString = "update T_Person set p_name = @name,p_age = @age where p_id = @id";

SqlParameter[] sqlParameter = {

new SqlParameter("@id",),

new SqlParameter("@name",r),

new SqlParameter("@age", )

};

sqlParameter[0].Value = ;

sqlParameter[1].Value = ;

sqlParameter[2].Value = ;

try

{

eNonQuery(new SqlConnection(connString), , updateString, sqlParameter);

}

catch (Exception ex)

{

ine(ng());

}

}

///

/// 通过id取得用户

///

/// 要取得的用户的id

/// 取得的用户

public static Person GetPersonByID(int id)

{

if (!PersonIsExistById(id))

{

return null;

}

Person person = new Person();

string selectString = "select * from T_Person where p_id = @id";

SqlParameter[] sqlPara = {

new SqlParameter("@id",)

};

sqlPara[0].Value = id;

SqlDataReader dr = eReader(connString, , selectString, sqlPara);

try

{

while (())

{

= 32(dr["p_id"]); = dr["p_name"].ToString();

= 32(dr["p_age"]);

}

}

catch (Exception ex)

{

ine(ng());

return null;

}

return person;

}

///

/// 取得最大的id

///

/// 如果返回-1表示数据库中没有数据,否则返回的就是最大的id

public static int GetMaxPersonID()

{

string selectString = "select max(p_id) as maxID from T_Person";

object obj = null;

obj = eScalar(new SqlConnection(connString), , selectString, null);

if (!TableHasRecord()) {

return -1;

}

else

{

return 32(obj);

}

}

///

/// 根据id判断用户是否存在

///

/// 要判断的用户的id

/// 返回true表示该用户存在,返回false表示该用户不存在

public static bool PersonIsExistById(int id)

{

string selectString = "select * from T_Person where p_id = @id";

SqlParameter[] sqlPara = {

new SqlParameter("@id",)

};

sqlPara[0].Value = id;

SqlDataReader dr = eReader(connString, , selectString, sqlPara);

while (())

{ return true;

}

return false;

}

///

/// 判断表中是否有数据

///

/// 返回true表示有数据,返回false表示没有数据

public static bool TableHasRecord()

{

string selectString = "select * from T_Person";

SqlDataReader dr = eReader(connString, , selectString, null);

while (())

{

return true;

}

return false;

}

///

/// 取得所有用户

///

/// 所有用户的集合 public static List GetManyPersons()

{

string selectString = "select * from T_Person";

List lstPerson = new List();

Person person = null;

DataSet ds = eDataSet(connString, , selectString, null);

if ([0]. > 0)

{

for (int i = 0; i < [0].; i++)

{

person = new Person();

= 32([0].Rows[0]["p_id"].ToString());

= [0].Rows[0]["p_name"].ToString();

= 32([0].Rows[0]["p_age"].ToString());

(person);

}

}

return lstPerson;

}

} }

2023年6月21日发(作者:)

SqlHelper代码、功能、用法介绍

数据访问组件SqlHelper

数据访问组件是一组通用的访问数据库的代码,在所有项目中都可以用,一般不需要修改。本节使用的是Microsoft提供的数据访问助手,其封装很严密,且应用简单。

首先要先添加一个类,并命名为SqlHelper,系统会提示是否将类放在App_Code文件夹中。此时一定要选择“是”,因为放在此文件夹下,系统会自动进行编译,程序员就可以直接使用,无需另外编译了。

SqlHelper的功能

SqlHelper的目的是从数据库获得信息或将信息保存到数据库。本实例的SqlHelper主要功能如下。

(1)执行不返回数据的T-Sql命令。例如修改会员卡信息、添加会员资料等。

(2)返回一个字段的T-Sql命令。例如获取会员卡类型的积分规则。

(3)返回一组数据。例如获取会员资料、获取所有会员卡类型等。

(4)缓存参数列表。在执行一条语句时,可能有多个参数,为了提高速度,将参数缓存。

(5)读取缓存的参数。

下面用图表的方式描述SqlHelper类的功能,如图7-16所示。

图7-16 SqlHelper功能图

小结

本文主要介绍了如何在Visual Studio 2005中新建网站项目,如何使用版本控制工具管理网站的源代码,以及母版页、导航地图和皮肤文件的使用。导航地图中以XML文件为数据源,TreeView为展现形式。除了需要在XML文件中手动填写模块功能外,其他都可以自动实现,这就是 2.0的最大好处。代码量的减少给开发人员带来了极大的便利。

SqlHelper的小知识

SqlHelper是一个微软完全开放源码的数据库操作类,用于简化你重复的去写那些数据库连接(DbConnection)啊,DbCommand,DbDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。

SqlHelper 类实现详细信息

SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。

在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用

SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。在 SqlHelper 类中实现的方法包括:

ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

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

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

ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。

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

除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在

SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置 Connection、CommandType、CommandText 和 Transaction 属性。SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括:

AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的

SqlCommand。

AssignParameterValues:该函数用于为 SqlParameter 对象赋值。

PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。

ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开

SqlDataReader 对象,以便最有效地管理与阅读器关联的连接的有效期。

执行SQL语句

引用完毕后,就可以执行SQL语句,使用SQLHelper执行SQL语句非常方便,下面代码演示了如何执行插入、删除操作。

string strsql = "insert into mynews values ('SQLHelper插入标题')"; //编写SQL语句

nQuery(strsql); //执行SQL语句

上述代码运行后,则会执行插入操作,相比于,封装后的代码更加简便易懂,删除操作代码如下所示。

string strsql2 = "delete form mynews where id=3"; //编写SQL语句

nQuery(strsql2); //执行SQL语句

当需要执行SELECT语句时,可以通过apter获取数据,示例代码如下所示。

string strsql = "select * from mynews where id=3"; //编写SQL语句

DataSet ds = apter(strsql, ,

"mydatatable");

上述代码通过apter获取数据,并创建了一个mydatatable虚拟表,填充DataSet对象。当需要获取DataSet对象中的数据时,和普通的DataSet对象一样。SQLHelper封装了中的许多方法,为开发人员提高了效率,同时也增加了安全性和模块化的特性。

注意:上述代码中的SQLHelper类能够执行的是SQL语句,如果需要执行存储过程,则需要更改SQLHelper类中的相应的CommandType属性的值。

为什么要使用数据访问层?

如果不使用数据访问层,那么你的代码里会出现很多SqlConnection、SqlCommand、SqlDataReader、Open、 Close……这些类和方法,而且代码量很大,让你不胜其烦,而且代码写起来,其实都是体力活,没有技术含量。因此我们要把数据访问层封装起来,方便重用。微软已经替我们做好了这个工作,那就是SqlHelper,下图是SqlHelper的类关系图:

下面介绍我的使用方法。

执行一个无返回值的存储过程: create proc p_Delete

@id int

as

delete table1 where id=@id

这是一个删除数据的存储过程,调用该存储过程只需要一句话:eNonQuery

(, "p_Delete", id);,这里的id是int类型,而不是SqlParameter类型。该调用是调用的public

static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)方法。以此类推。返回一个DataSet类型:eDataset (, pro, 参数列表);参数也是直接传递,无需构造SqlParameter.

使用SqlHelper

using System;

using c;

using ;

using ;

using ent;

namespace TestSQL_Project

{

public class DBPersonSqlHelper

{

private static readonly string connString = "Data Source=(local);Database=MyTest;Uid=sa;Pwd=123456";

///

/// 添加用户

///

/// 要添加的用户

public static void AddPerson(Person person)

{

string insertString = "insert into T_Person(p_name,p_age) values(@name,@age)";

SqlParameter[] cmdParameter = {

new SqlParameter("@name", r),

new SqlParameter("@age", )

};

cmdParameter[0].Value = ;

cmdParameter[1].Value = ;

try

{

eNonQuery(new SqlConnection(connString), , insertString, cmdParameter);

}

catch (Exception ex)

{

ine(ng());

}

} ///

/// 通过用户ID删除用户

///

/// 要删除的用户的ID

public static void DeletePersonByID(int id)

{

string deleteString = "delete from T_Person where p_id = @id";

SqlParameter[] cmdParameter = {

new SqlParameter("@id", )

};

cmdParameter[0].Value = id;

try

{

eNonQuery(new SqlConnection(connString), , deleteString, cmdParameter);

}

catch (Exception ex)

{

ine(ng());

}

}

///

/// 更新用户 ///

/// 要更新的用户

public static void UpdatePerson(Person person)

{

string updateString = "update T_Person set p_name = @name,p_age = @age where p_id = @id";

SqlParameter[] sqlParameter = {

new SqlParameter("@id",),

new SqlParameter("@name",r),

new SqlParameter("@age", )

};

sqlParameter[0].Value = ;

sqlParameter[1].Value = ;

sqlParameter[2].Value = ;

try

{

eNonQuery(new SqlConnection(connString), , updateString, sqlParameter);

}

catch (Exception ex)

{

ine(ng());

}

}

///

/// 通过id取得用户

///

/// 要取得的用户的id

/// 取得的用户

public static Person GetPersonByID(int id)

{

if (!PersonIsExistById(id))

{

return null;

}

Person person = new Person();

string selectString = "select * from T_Person where p_id = @id";

SqlParameter[] sqlPara = {

new SqlParameter("@id",)

};

sqlPara[0].Value = id;

SqlDataReader dr = eReader(connString, , selectString, sqlPara);

try

{

while (())

{

= 32(dr["p_id"]); = dr["p_name"].ToString();

= 32(dr["p_age"]);

}

}

catch (Exception ex)

{

ine(ng());

return null;

}

return person;

}

///

/// 取得最大的id

///

/// 如果返回-1表示数据库中没有数据,否则返回的就是最大的id

public static int GetMaxPersonID()

{

string selectString = "select max(p_id) as maxID from T_Person";

object obj = null;

obj = eScalar(new SqlConnection(connString), , selectString, null);

if (!TableHasRecord()) {

return -1;

}

else

{

return 32(obj);

}

}

///

/// 根据id判断用户是否存在

///

/// 要判断的用户的id

/// 返回true表示该用户存在,返回false表示该用户不存在

public static bool PersonIsExistById(int id)

{

string selectString = "select * from T_Person where p_id = @id";

SqlParameter[] sqlPara = {

new SqlParameter("@id",)

};

sqlPara[0].Value = id;

SqlDataReader dr = eReader(connString, , selectString, sqlPara);

while (())

{ return true;

}

return false;

}

///

/// 判断表中是否有数据

///

/// 返回true表示有数据,返回false表示没有数据

public static bool TableHasRecord()

{

string selectString = "select * from T_Person";

SqlDataReader dr = eReader(connString, , selectString, null);

while (())

{

return true;

}

return false;

}

///

/// 取得所有用户

///

/// 所有用户的集合 public static List GetManyPersons()

{

string selectString = "select * from T_Person";

List lstPerson = new List();

Person person = null;

DataSet ds = eDataSet(connString, , selectString, null);

if ([0]. > 0)

{

for (int i = 0; i < [0].; i++)

{

person = new Person();

= 32([0].Rows[0]["p_id"].ToString());

= [0].Rows[0]["p_name"].ToString();

= 32([0].Rows[0]["p_age"].ToString());

(person);

}

}

return lstPerson;

}

} }