本文章是摘要于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];
}
}