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];


                

            }
        }

 

posted @ 2017-11-30 21:16  5只猫  阅读(252)  评论(0编辑  收藏  举报