目录

一、思维导图​

二、编写SqlHelper调用代码

三、成员

四、使用C#设计实现SqlHelper


一、思维导图HIS-第四周学习笔记:设计实现SqlHelper

二、编写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);  
}

 

相关文章:

  • 2021-10-14
  • 2021-06-29
猜你喜欢
  • 2021-03-31
  • 2021-08-30
  • 2022-01-10
  • 2021-04-20
  • 2021-12-03
  • 2021-10-16
相关资源
相似解决方案