ADO,NET中简单三层SQLHelper封装介绍

一、这个东西好久没有用过了,感觉都快要忘记了,老了老了,自从用了EF,感觉这个sql封装真是low,但是这确实最底层的使用,一直都在接触CSDN,以前都没有写过文章,一方面是自己不想写,然而我却犯二的写了五六个笔记本的笔记,想想真是让人恶心至极,好了。开车:

二、全部源码

config配置

  <connectionStrings>
    <add name="mysqlkey" connectionString="Data Source=NDFI4HIE0FE6Z1R;Initial Catalog=USER;Integrated Security=True"/>
  </connectionStrings>
  public static class Sqlhelp
    {
      //定义一个连接字符串,readonly修饰的变量,只能在初始化的时候赋值,以及构造函数中赋值,其他地方只能读取不能设置值
      private static readonly string constr = ConfigurationManager.ConnectionStrings["mysqlkey"].ConnectionString;
      //1、执行增(insert)、删(delete)、改(update)的方法 ExecuteNonQuery()可变参数用params关键字
      public static int ENonQuery(string sql,params SqlParameter[]pms)
      {
          using (SqlConnection con=new SqlConnection(constr))
          {
              using(SqlCommand cmd=new SqlCommand(sql,con))
              {
                  if (pms.Length>0)
                  {
                      cmd.Parameters.AddRange(pms);
                  }
                  con.Open();
                   return (int)cmd.ExecuteNonQuery();
              }
          }
         
      }

        //2、执行查询,返回单个值的方法 ExecuteScalar()
      public static object EScalar(string sql, params SqlParameter[] pms)
      {
          using (SqlConnection con = new SqlConnection(constr))
          {
              using (SqlCommand cmd = new SqlCommand(sql, con))
              {
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    con.Open();
                    return cmd.ExecuteScalar();
              }
          }
      }
      //3、执行查询,返回多行多列的方法
      public static SqlDataReader EReader(string sql, params SqlParameter[] pms)
      {
          SqlConnection con = new SqlConnection(constr);
          
              using (SqlCommand cmd=new SqlCommand(sql,con))
              {
                  if (pms!=null)
                  {
                      cmd.Parameters.AddRange(pms);
                  }
                  try
                  {
                      con.Open();
                      //System.Data.CommandBehavior.CloseConnection这个枚举参数,表示将来使用完毕SqlDataReader后,
                      //在关闭reader的同时,在SqlDataReader内部会将关联的对象也关闭掉
                      return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
                  }
                catch
                {
                    con.Close();
                    con.Dispose();
                    throw;
                }

            }
      }
    }

1、注意这里的运用的静态类和静态方法,一个线程始终都是一个对象,因为静态类没办法实例化

2、ExecuteNonQuery方法:

通常使用它来执行Update、Insert和Delete语句,对于Update、Insert和Delete语句,返回值为该命令所影响的行数,对于所有其他类型的语句,返回值为-1。

3、ExecuteScalar方法:

ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语句后的返回值与ExecuteNonQuery()并不相同,ExecuteScalar()方法的返回值的数据类型是Object类型。如果执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示。

4、ExecuteReader方法:

  • ExecuteReader()执行后返回的SqlDataReader对象
  • 返回的结果多行多列,注意读取,注意在读取SqlDataReader一定要保证链接不能断开

5、SqlDataReader对象的使用

                    SqlDataReader reader= Sqlhelp.EReader(失去了,pms);
 
                    if (reader.HasRows)//HasRows判断reader中是否有数据
                    {
                        while(reader.Read())  //Read()方法读取下一条记录,如果没有下一条,返回false,则表示读取完成
                        {
                            int id = reader.GetInt32(0);
                            string name = reader.GetString(1);
                           string  gender = reader.GetBoolean(3) == true ? "男" : "女"; //运用了三元表达式
                            int age = reader.GetInt32(2);
 
                            Console.WriteLine("	{0}	{1}	{2}	{3}
",id,name,gender,age);
                        }
 
                        Console.ReadKey();

注意:

  • SqlDataReader的HasRows属性可以判断SqlDataReader中是否有(一行或多行)数据,返回bool值,有数据时为true,程序向下执行,开始进入读取数据环节
  • SqlDataReader的Read方法可以使SqlDataReader前进到下一条记录,同样返回bool值,当下一条无记录返回false,则表示记录读取完毕;当下一条有数据时为true,将读取到的数据(当前的一条记录)暂存在SqlDataReader中
  • SqlDataReader的一系列get方法可以获取SqlDataReader中不同类型的值,保存到指定的变量中
  • get方法参数为列数,即第几列

关于链接断开在Sqlhelper进行了处理

三、调用示例

            string sql = "select COUNT(*) from user1 where Name=@name and Psw=@psw";
            SqlParameter[]pms=new SqlParameter[]{
            
            new SqlParameter("@name",SqlDbType.NVarChar,50){ Value=textBox1.Text.Trim()},
            new SqlParameter("@psw",SqlDbType.NVarChar,50){Value=textBox2.Text}
            };
            //Sqlhelp sqlhelp = new Sqlhelp();
                int r = (int)Sqlhelp.EScalar(sql,pms);
                if (r > 0)
                {
                    MessageBox.Show("登录成功");
                }
                else
                {
                    MessageBox.Show("登录失败");


原文地址:https://www.cnblogs.com/tuboshu/p/10752371.html