目录
一、思维导图
二、编写SqlHelper调用代码
SqlHelper支持多种数据库包括MySql、SqlServer、Oracle、Access数据库,如果数据库是SqlServer,那么你可以使用SqlServerHelper类,如果是MySql,可以使用MySqlHelper,如果是Access,可以使用AccessHelper。如果是Oracle则可以使用OracleHelper类。
1.静态方式
是目前应用最多的一种。
(1)查询语句执行
DataTable dt=SqlServerHelper.ReadTable("select * from table1");
(2)插入语句执行
SqlServerHelper.ExecuteNonQuery("insert into [students] values(@student_name,@class"),
SqlServerHelper.CreateInputParameter("@student_name", SqlDbType.NVarChar, 100, txt_student_name_sqlserver.Text),
SqlServerHelper.CreateInputParameter("@class", SqlDbType.NVarChar, 100, txt_class_sqlserver.Text)
);
2.对象式编程
using (SqlServerHelper helper = new SqlServerHelper())
{
helper.Command.CommandText = "delete from [Students] where [email protected]";
helper.AddParameter("@stid", SqlDbType. Int, student_id);
helper.Open();
helper.ExecuteNoneQuery();
helper.Command.Parameters.Clear();
helper.Command.CommandText = "select * from [Students]";return helper.ReadTable();
}
三、成员
1.在 SqlHelper 类中实现的方法
(1)ExecuteNonQuery用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。
(2)ExecuteReader用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集。
(3)ExecuteDataset返回DataSet对象,该对象包含由某一命令返回的结果集。
(4)ExecuteScalar返回一个值。该值始终是该命令返回的第一行的第一列。
(5)ExecuteXmlReader方法返回 FOR XML 查询的 XML 片段。
2.SqlHelper 类中的专用实用程序函数
(1)AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的 SqlCommand。
(2)AssignParameterValues:该函数用于为 SqlParameter 对象赋值。
(3)PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。
(4)ExecuteReader用于通过适当的 CommandBehavior 打开SqlDataReader对象。
四、使用C#设计实现SqlHelper
以控制台程序为案例
1.首先配置一下连接字符串——在app.config文件中增加如下节点
<connectionStrings>
<add name="Sql" connectionString="server=数据库地址;uid=用户名;pwd=密码;database=数据库名"/>
</connectionStrings>
2.接着需要创建一个名为SqlHepler类,然后创建一个方法来获取app.config文件中配置的连接字符串
public static string GetSqlConnectionString(){
return ConfigurationManager.
ConnectionStrings["Sql"].ConnectionString;
}
3.封装第一个SqlHepler方法,封装一个执行的sql 返回受影响的行数
public static int ExecuteNonQuery(string sqlText,params SqlParameter[] parameters){
using (SqlConnection conn = new SqlConnection(GetSqlConnectionString()))
{
using (SqlCommand cmd=conn.CreateCommand())
{
conn.Open(); //打开数据库
cmd.CommandText = sqlText; //对CommandText进行赋值
cmd.Parameters.AddRange(parameters); //对数据库使用参数进行赋值
}
}
}
4.继续封装一个查询操作,返回查询结果中的第一行第一列的值
public static object ExecuteScalar(string sqlText, params SqlParameter[] parameters)
{
using (SqlConnection conn=new SqlConnection(GetSqlConnectionString()))
{
using (SqlCommand cmd=conn.CreateCommand())
{
conn.Open();
cmd.CommandText = sqlText;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteScalar();
}
}}
5.在封装个常用的查询方法,返回一个DataTable
public static DataTable ExecuteDataTable(string sqlText, params SqlParameter[] parameters)
{
using (SqlDataAdapter adapter =new SqlDataAdapter(sqlText,GetSqlConnectionString()))
{
DataTable dt = new DataTable();
adapter.SelectCommand.Parameters.AddRange(parameters);
adapter.Fill(dt);
return dt;
}}
6.最后再写封装一个查询方法,该方法返回的是一个SqlDataReader类型
public static SqlDataReader ExecuteReader(string sqlText, params SqlParameter[] parameters){
//SqlDataReader要求,它读取数据的时候有,它独占它的SqlConnection对象,而且SqlConnection必须是Open状态
SqlConnection conn = new SqlConnection(GetSqlConnectionString());//不要释放连接,因为后面还需要连接打开状态
SqlCommand cmd = conn.CreateCommand();
conn.Open();
cmd.CommandText = sqlText;
cmd.Parameters.AddRange(parameters);
//CommandBehavior.CloseConnection当SqlDataReader释放的时候,顺便把SqlConnection对象也释放掉
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}