zoukankan      html  css  js  c++  java
  • ADO.NET 1.基础(SqlCommand\ExecuteScalar\ExecuteReader\sqlDataAdapter)

    目录:

    1.ADO.NET的组成

    2.SqlCommand-执行增删改

    1. 例题

    3.SqlCommand-查询单个值(ExecuteScalar)

    1. 例题

    4.SqlCommand-查询多行(ExecuteReader)

    1. 例题

    5.qlDataAdapter&数据集-查询多行

    1. DataSet
    2. 例题

     

    image

    1.如果要执行增删改和单个值查询的时候,可以直接让【车间工人】去【中央仓库】做。
    2.如果要从【中央仓库】查询多行货物的时候,有两种方式:
      2.1可以选择叫一辆【货运卡车】去搬,卡车可以一次性的都搬过来,但【生产车间】一下子用不了,所以卡车就把货先放在【车间临时仓库】,这样车间需要的时候直接拿就可以了。
      2.2可以让【车间工人】把自己的【摩托车】拿来,骑【摩托车】去仓库拿货,但每次只能拿一行货物,所以需要往返的拿很多次才能拿完。但因为每次只拿一行货物过来,车间就直接使用了,不必存到【车间临时仓库】里。

    image

     

    1.SqlCommand-执行增删改

    image

    例题:

    static void Main(string[] args)
            {
                Console.WriteLine("增加数据:");
                string ss = Convert.ToString(Console.ReadLine());//字符串使用Console.ReadLine()
                AddRecord(ss);
            }
    
            public static void AddRecord(string Test)
            {
                int res  = -1; //准别接收新增受影响行数
    
               
    string sqlCon = @"Server=.\SQLEXPRESS;database=tangsansan;uid=sa;pwd=sa";
                SqlConnection conn = newSqlConnection();
                conn.ConnectionString = sqlCon;
                string sqlstr = "insert into T_Category(FName) values ('"+ Test + "')";//values里面的string值需要''
              
    SqlCommand cmd = newSqlCommand(sqlstr,conn);
                conn.Open();
                res = cmd.ExecuteNonQuery(); //负责返回受影响行数
               
    conn.Close(); if(res>0)
                {
                    Console.WriteLine("新增成功!~~");
                }
                else
              
    {
                    Console.WriteLine("失败啦!");
                }
              
            }

    imageimage

     

    2.SqlCommand-查询单个值(ExecuteScalar)

    image

    SqlCommand的ExecuteScalar方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,因为不能确定返回值的类型,所以返回值是object类型

    md.CommandText = "select count(*) from T_Users"; int i = Convert.ToInt32(cmd.ExecuteScalar())
    cmd.CommandText = "select getdate()"; DateTime dt = Convert.ToDateTime(cmd.ExecuteScalar());

    例题

    static void Main(string[] args)
            {
                //Console.WriteLine("增加数据:");
                //string ss = Convert.ToString(Console.ReadLine());//字符串使用Console.ReadLine()
                //AddRecord(ss);
    
                QuerySingle();
            }
    
            //查询单个值
            public static void QuerySingle()
            {
                SqlConnection conn = new SqlConnection(sqlCon);
                string sqlstr = "select COUNT(*) from  T_Category";
                SqlCommand cmd = new SqlCommand(sqlstr, conn);
                conn.Open();
                //用于执行查询,并返回查询所返回的结果集中第一行的第一列
                object obj = cmd.ExecuteScalar();
                conn.Close();
                Console.WriteLine(obj.ToString());
            }

    imageimage

     

    3.SqlCommand-查询多行(ExecuteReader)

    image

    属性 说明
    HasRows

    是否返回了结果

    方法

    说明

    Read 前进到下一行记录
    Close

    关闭 DataReader 对象

    执行查询

    执行有多行结果集的用ExecuteReader

    • SqlDataReader reader = cmd.ExecuteReader();...

          while (reader.Read())
          {

               Console.WriteLine(reader.GetString(1));
          }

    • reader的GetString、GetInt32等方法只接受整数参数,也就是序号,用GetOrdinal方法根据列名动态得到序号
    • 为什么用using。Close:关闭以后还能打开。Dispose:直接销毁,不能再次使用。using在出了作用域以后调用Dispose,SqlConnection、FileStream等的Dispose内部都会做这样的判断:判断有没有close,如果没有Close就先Close再Dispose。

    例题:

    static void Main(string[] args)
            {
                //Console.WriteLine("增加数据:");
                //string ss = Convert.ToString(Console.ReadLine());//字符串使用Console.ReadLine()
                //AddRecord(ss);
    
                //QuerySingle();
                QueryList();
            }
    
            //查询多个值--DataReader,逐行读取
            public static void QueryList()
            {
                SqlConnection conn = new SqlConnection(sqlCon);
                string sqlstr = "select * from  T_Category";
                SqlCommand cmd = new SqlCommand(sqlstr, conn);
                conn.Open();
                //获取一个读取器对象           
            SqlDataReader dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        //Console.WriteLine(dr[0].ToString() + " " + dr[1].ToString());
                        Console.WriteLine(dr["FId"].ToString() + " " + dr["FName"].ToString());
                    }
                }
                else
                {
                    Console.WriteLine("无属性");
                }
                dr.Close();//关闭读取器
                conn.Close();
            }

    image

     

    4.SqlDataAdapter&数据集-查询多行

    image

    DataSet

          SqlDataReader是连接相关的, SqlDataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询结果有多少条,对程序占用的内存都几乎没有影响。
          SqlDataReader对于小数据量的数据来说带来的只有麻烦,优点可以忽略不计。ADO.Net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取。
          DataSet dataset = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dataset);
          SqlDataAdapter是DataSet和数据库之间沟通的桥梁。数据集DataSet包含若干表DataTable,DataTable包含若干行DataRow。foreach (DataRow row in dataset.Tables[0].Rows)             row["Name"]。

    例题:

    //适配器读取Adapter
            public static void QueryListByAdapter()
            {
                SqlConnection conn = new SqlConnection(sqlCon);
                string sqlstr = "select * from  T_Category";
                //创建适配器对象,告诉它要做什么事情,走哪条路
                SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, conn);
                //创建数据集对象(程序段的临时数据表)
                DataSet ds = new DataSet();
                //调用Fill填充数据集
                adapter.Fill(ds);
                DataTable dt = ds.Tables[0];
                //循环表中的每一行
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    DataRow dr = dt.Rows[i];//将循环的行赋值给dr对象
                    Console.WriteLine(dr[0].ToString()+" "+dr[1].ToString());
                }
            }

    image

  • 相关阅读:
    trackr: An AngularJS app with a Java 8 backend – Part III
    trackr: An AngularJS app with a Java 8 backend – Part II
    21. Wireless tools (无线工具 5个)
    20. Web proxies (网页代理 4个)
    19. Rootkit detectors (隐形工具包检测器 5个)
    18. Fuzzers (模糊测试器 4个)
    16. Antimalware (反病毒 3个)
    17. Debuggers (调试器 5个)
    15. Password auditing (密码审核 12个)
    14. Encryption tools (加密工具 8个)
  • 原文地址:https://www.cnblogs.com/tangge/p/2674166.html
Copyright © 2011-2022 走看看