• ADO.NET


    本文章是摘要于http://www.cnblogs.com/liuhaorain/archive/2012/03/25/2399510.html。

    一:什么是ADO.NET

    ADO.NET 是.NET平台上一个重要的组件。用于与数据源进行交互的类库。一般来说数据源是数据库。

    ADO的简称是(ActiveX Data Objects)。

    二:ADO.NET中的两个重要组件(图片来源于网络)

    1.Data Provider 数据提供程序

       Connection:连接对象,用于与数据源的联系

       Command:命令对象,用于与数据库交互的语句的对象

       DataAdapter:数据适配对象

       DataReader:数据读取对象,

    2.DataSet 数据集

       DataTable 数据表 这里的内容和数据库类似,这里定义的就是用来存放从数据库里取出来的数据。

    三:不同的数据提供程序

    针对于不同的数据库,如果你是使用微软的Sql server的话,用的是System.Data.SqlClient这个命名空间下的数据提供程序。

     对应下来非别是

     SqlConnection

     SqlCommand

     SqlDataAdapter

     SqlDataReader

    四:Connection对象

     这里我用的是针对sql server的数据提供程序,所以这里是SqlConnection

     主要方法:

     1.Open() 连接数据库

     2.Dispose() 释放资源   释放之后,就要重新new一个了

     3.Close() 关闭数据库  关闭之后,还是可以open的

    主要属性

     1.State 状态,描述当前连接的状态

     2.connectionString 连接字符串。用于配置要连接的数据库的账号密码 

     string connectionString = "Data Source='.';Initial Catalog='默认数据库的名字';User Id='sa';Password='密码';"
    SqlConnection sqlConnection = new SqlConnection(connectionString);

     代码

     数据库连接是一个耗资源的过程,用完之后,应该关闭连接,一下有两种方式,一种是是用try catch。在finnaly里将连接关闭。

     另一种个是使用using 语句,using实际上是对第一种的封装,它将using里的语句放到try当中,在finnaly里自动调用Dispose()方法。比第一种方便很多。

     // link database
            private void button1_Click(object sender, EventArgs e)
            {
                //方法1 try catch
                //string connectionString = "Data Source='.';Initial Catalog='Student';User Id='sa';Password='mima';";
                //SqlConnection sqlConnection = new SqlConnection(connectionString);
                //try
                //{
                //    sqlConnection.Open();
                //    MessageBox.Show("连接成功");
                //}
                //catch (Exception ex)
                //{
                //    MessageBox.Show(ex.Message);
                //}
                //finally
                //{
                //    sqlConnection.Close();
                //}
    
    
                //方法二 using
                string connectionString = "Data Source='.';Initial Catalog='Student';User Id='sa';Password='mima';";
                using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                {
                    sqlConnection.Open();
                    if (sqlConnection.State==ConnectionState.Open)
                    {
                        MessageBox.Show("连接成功");
                    }
                }
            }

    五:Command 命令对象

    这里我用的是针对sql server的数据提供程序,所以这里是SqlCommand 

    前面SqlConnection对象已经帮我们连接好了服务器,接下来就是要对数据的操作了。

    属性:

    CommandText 命令文本

    string cmdString = "select count(*) from StudentCourse";
    SqlCommand sqlCommand = new SqlCommand(cmdString,sqlConnection);

    为了防止sql语句注入,应该将sql语句 参数化

     string number = "101";
     string cmdString = "select * from StudentCourse where Number=@Number";
     SqlCommand sqlCommand = new SqlCommand(cmdString,sqlConnection);
     sqlCommand.Parameters.AddWithValue("@Number", number);

    方法:

     ExecuteNonQuery: 执行不返回数据行的操作,并返回一个int类型的数据。

     ExecuteReader: 执行查询,并返回一个 DataReader 对象。

     ExecuteScalar: 执行查询,并返回查询结果集中第一行的第一列(object类型)。如果找不到结果集中第一行的第一列,则返回 null 引用。

    六:DataReader 数据读取对象

    这里我用的是针对sql server的数据提供程序,所以这里是SqlDataReader

    ExcuteReader方法返回一个DataReader对象。DataReader是一个快速的,轻量级,只读的遍历访问每一行数据的数据流。使用DataReader时,需要注意以下几点:

    • DataReader一次遍历一行数据,并返回一个包含列名字集合。
    • 第一次调用Read()方法获取第一行数据,并将游标指向下一行数据。当再次调用该方法时候,将读取下一行数据。
    • 当检测到不再有数据行时,Read()方法将返回false。
    • 通过HasRows属性,我们知道查询结果中是否有数据行。
    • 当我们使用完DataReader时,一定要注意关闭。SQL Server默认只允许打开一个DataReader。

    DataReader是一个向前的指针,本身并不包含数据,调用一次Read()方法它就向前到下一条记录,一个DataReader必须单独占用一个打开的数据库连接!

    七:DataAdapter

    Connection对象 Command对象 DataReader对象是基于连接的,相当于每次都需要重新连接服务器,实际上性能是十分低的。

    可以使用另一种基于非连接的,所谓非连接无非是一次性将数据存到本地DataSet,当然其中少不了一个将数据库中的数据适配到DataSet的工具,那就是DataAdapter 数据适配器

    通过fill的方法,将数据存到本地的DataSet中。

    具体的代码如下

         // link database
            private void button1_Click(object sender, EventArgs e)
            {
                string connectionString = "Data Source='.';Initial Catalog='Student';User Id='sa';Password='mima';";
                using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                {
                    try
                    {
                        sqlConnection.Open();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }

              string cmdString = "select * from StudentCourse";
              SqlCommand sqlCommand = new SqlCommand(cmdString,sqlConnection);

    
    

              SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);

    
    

              DataSet dataSet = new DataSet();

    
    

              dataSet.Tables.Add(new DataTable("resulttable"));

    
    

              sqlDataAdapter.Fill(dataSet, "resulttable");
              dataGridView1.DataSource = dataSet.Tables[0];

    
                    
    
                }
            }
  • 相关阅读:
    【大数据云原生系列】大数据系统云原生渐进式演进最佳实践
    Apache Flink on K8s:四种运行模式,我该选择哪种?
    Istio 运维实战系列(2):让人头大的『无头服务』-上
    istio 常见的 10 个异常
    Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
    腾讯会议大规模使用Kubernetes的技术实践
    腾讯云推出云原生etcd服务
    Regionals 2014 Asia
    HDU1754 I Hate It splay
    HNOI2002 营业额统计 splay
  • 原文地址:https://www.cnblogs.com/MzwCat/p/7931870.html
Copyright © 2020-2023  润新知