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
///
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
///
///
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
///
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;
}
///
/// 判断表中是否有数据
///
///
public static bool TableHasRecord()
{
string selectString = "select * from T_Person";
SqlDataReader dr = eReader(connString, , selectString, null);
while (())
{
return true;
}
return false;
}
///
/// 取得所有用户
///
///
{
string selectString = "select * from T_Person";
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
///
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
///
///
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
///
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;
}
///
/// 判断表中是否有数据
///
///
public static bool TableHasRecord()
{
string selectString = "select * from T_Person";
SqlDataReader dr = eReader(connString, , selectString, null);
while (())
{
return true;
}
return false;
}
///
/// 取得所有用户
///
///
{
string selectString = "select * from T_Person";
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;
}
} }
发布评论