zoukankan      html  css  js  c++  java
  • 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("登录失败");


  • 相关阅读:
    java:IO流(处理流(缓冲流,转换流,数据流),对象的序列化,Properties)
    java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)
    java:容器/集合Collection(List(ArrayList,LinkedList,Vector),Set(HashSet(LinkedHashSet),TreeSet))
    java:常用类(包装类,equals和==的比较,Date,java.lang.String中常用方法,枚举enum)
    java:LeakFilling(面向对象)
    java:异常机制(try,catch,finally,throw,throws,自定义异常)
    深入剖析Java中的装箱和拆箱
    Java 如何有效地避免OOM:善于利用软引用和弱引用
    浅谈Java中的hashcode方法
    浅析Java中的访问权限控制
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752371.html
Copyright © 2011-2022 走看看