• ADO.NET 基础


     转自:http://www.cnblogs.com/tangge/archive/2012/09/06/2674166.html#C

     

    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

  • 相关阅读:
    得到内网可用的SqlServer 及某数据库下的表及其他的架构
    VS2005 XML注释生成XML文档文件
    华表 单元格公式设定与计算
    自定义控件开发示例二
    自定义控件的 Enum类和Color类 属性的公开设定
    入门者初试 Cell(华表)结合C#的应用
    VS2005 + VSS6.0 简单应用示例
    SQL2000联机丛书:使用和维护数据仓库
    VS2005 通过SMO(SQL Management Objects) 管理 数据库的作业 警报 备份 等任务
    SQL2000联机丛书:基本 MDX
  • 原文地址:https://www.cnblogs.com/Jenny90/p/3018552.html
Copyright © 2020-2023  润新知