C#成魔之路<6>ADO.NET数据访问技术(2)
2016-03-06 19:53
309 查看
1、读取数据:DataReader对象
在使用Command对象执行完SQL命令后,若需要从返回的结果集中读取数据,可以使用DataReader对象。
(1)DataReader对象详述
DataReader是数据读取器对象,提供只读向前的游标,如果应用程序需要每次从数据库中取出最新的数据,或者只是需要快速读取数据,并不需要修改数据,那么就可以使用DataReader对象进行读取。对于不同的数据库连接,有不同的DataReader类型,具体如下:
在System.Data.SqlClient命名空间下时,可以调用SqlDataReader类。
在System.Data.OleDb命名空间下时,可以调用OleDbDataReader类。
在System.Data.Odbc命名空间下时,可以调用OdbcDataReade类。
在System.Data.Oracle命名空间下,可以调用OracleDataReader类。
在使用DataReader对象读取数据的时候,可以调用Command对象的ExecuteReader方法,根据SQL语句的结果创建一个DataReader对象。
示例程序:
(2)判断查询结果中是否有值
可以通过SqlDataReader对象的HasRows属性获取一个值,该值指示SqlDataReader是否包含一行或者多行,即判断检查结果中是否有值。
示例程序:
(3)读取数据
如果要读取数据表中的数据,通过ExecuteReader方法,根据SQL语句创造一个SqlDataReader对象之后,在调用SqlDataReader对象的read方法读取数据。read方法使qlDataReader前进到下一条记录,qlDataReader的默认位置是在第一条记录前面。因此,必须调用read方法访问数据。
语法:
对于每个关联的SqlConnection,一次只能打开一个SqlDataReader,在一个关闭之后,打开另一个的任何尝试都将失败。
2、数据适配器DataAdapter对象
DataAdapter对象的工作方式有两种:一种是通过Command对象执行SQL语句,从数据源中检索数据,并且将检索到的数据填充到DataSet对象。
另一种方法是把对DataSet对象所做的更改写入数据源。
(1)DataAdapter对象概述
DataAdapter独享是一个数据适配器对象,是DataSet和数据源之间的桥梁。DataAdampter对象提供了四个属性,实现和数据源之间的互通。
SelectCommand:向数据库发送查询SQL语句。
DeleteCommand:向数据库发送删除SQL语句。
InsertCommand:向数据库发送插入SQL语句。
UpdateCommand:向数据库发送更新SQL语句。
对数据库进行操作的时候,只要将这四个属性设置成相应的SQL语句即可。DataAdampter对象中还有几个主要的方法,具体如下:
Fill方法用数据填充DataSet。语法:
如果所连接的是SQLServer 数据库,则可以通过将SqlDataAdapter和关联的SqlCommand和SqlConnection对象一起使用,从而提高总体性能。
Update方法更新数据库的时候,DataAdapter将调用DeleteCommand、InsertCommand和UpdateCommand属性。语法:
(2)填充DataSet数据集
通过DataAdapter对象的Fill方法填充DataSet数据集。Fill方法使用Select语句从数据源中检索数据。和Select命令相关连的Connection对象必须有效,但是不需要将其打开。
(3)更新数据源
使用DataAdapter对象的Update方法,可以将DataSet中修改过的数据及时的更新到数据库当中。在调用Update方法之前要实例化一个CommandBuilder类,自动根据DataAdapter的SelcetCommand的SQL语句判断其他的InsertCommand、UpdateCommand和DeleteCommand。这样就不需要设置DataAdapter的InsertCommand、UpdateCommand和DeleteCommand属性。直接使用Update方法来更新DataSet、DataTable或DataRow数组即可。
示例程序:
3、数据集:DataSet对象
DataSet也是ADO.NET的核心成员,支持ADO.NET断开式,分布式数据方案的核心对象。也是实现基于非连接的数据查询的核心组件。DataSet对象是创建在内存中的集合对象。相当于在内存中创建的一个小型关系数据库。
(1)DataSet对象概述
DataSet对象就像存放在内存中的一个小型数据库。可以包含数据表,数据列。数据行、视图、约束以及关系。通常DataSet的数据来源于数据库或者XML,为了从数据库中获取数据,需要使用数据适配器DataAdapter从数据库中查询数据。
语法如下:
(2)使用DataSet合并数据
可以使用DataSet的Merge方法吧DataSet、DataTable 或者DataRow数组的内存并入现有的DataSet中。Merge方法将指定的DataSet及其框架和当前的DataSet合并,在此过程中,将根据给定的参数保留或者放弃在当前DataSet中的更改并且处理不兼容的架构。
语法:
DataSet对象为null的时候,无法进行合并。
示例程序:
4、数据浏览器:DataGridView
DataGridView控件通常用到的是数据浏览控件,操作简单而且灵活功能强大。
(1)概述
DataGridView提供一种强大而灵活的以表格形式显示数据的方式,可以使用DataGridView控件来显示少量数据的只读视图,也可以对其进行缩放以显示特大数据集的可编辑视图。使用DataGridView控件,可以显示和编辑来自多种不同类型的数据源的表格数据。将数据绑定到DataGridView控件,只需要设置DataSource属性即可。DataGridView控件具有极高的可配置性和可扩展性,提供了大量属性方法和事件,可以用来对控件的外观和行为进行自定义。
(2)在DataGridView中显示数据
通过DataGridView控件是显示数据表中的数据,首先需要使用DataAdapter对象查询指定的数据,然后通过该对象的Fill方法填充DataSet,最后设置DataGridView的DataSource属性为DataSet的表格数据。
DataGridView的DataSource属性用于获取或设置DataGridView控件所显示数据的数据源。
具体事例见前面的示例程序。
注意:显示数据的时候,可以利用Columns[列的索引号]属性的Visible属性设置为false,从而隐藏指定的列。
(3)获取DataGridView中的当前单元格
如果需要获取当前单元格的信息,可以通过读取DataGridView控件的CurrentCell属性来实现,该属性用于获取当前还在活动状态的单元格。
注意:可以使用DataGridView控件中的SelectedCells集合属性来获取该控件中所有被选中的单元格信息。
示例程序:
在使用Command对象执行完SQL命令后,若需要从返回的结果集中读取数据,可以使用DataReader对象。
(1)DataReader对象详述
DataReader是数据读取器对象,提供只读向前的游标,如果应用程序需要每次从数据库中取出最新的数据,或者只是需要快速读取数据,并不需要修改数据,那么就可以使用DataReader对象进行读取。对于不同的数据库连接,有不同的DataReader类型,具体如下:
在System.Data.SqlClient命名空间下时,可以调用SqlDataReader类。
在System.Data.OleDb命名空间下时,可以调用OleDbDataReader类。
在System.Data.Odbc命名空间下时,可以调用OdbcDataReade类。
在System.Data.Oracle命名空间下,可以调用OracleDataReader类。
在使用DataReader对象读取数据的时候,可以调用Command对象的ExecuteReader方法,根据SQL语句的结果创建一个DataReader对象。
示例程序:
conn = new SqlConnection("server= ;database= ;uid= ;pwd= "); conn.Open();//打开数据库 SqlCommand sqlCmd = new SqlCommand();//创建数据库command sqlCmd.Connection = conn;//创建连接 sqlCmd.CommandText = " from tb_command";//设置SQL语句 sqlCmd.CommandType = CommandType.Text;//设置其type格式 SqlDataReader sdr = sqlCmd.ExecuteReader();//注意利用该方法进行datareader的创建 //若要创建SqlDataReader,必须调用SqlCommand对象的ExecuteReader方法。
(2)判断查询结果中是否有值
可以通过SqlDataReader对象的HasRows属性获取一个值,该值指示SqlDataReader是否包含一行或者多行,即判断检查结果中是否有值。
public override bool HasRows{get;} //如果sqlDataReader包含一行或者多行,则属性值为true,否则为false。
示例程序:
private void button1_Click(object sender, EventArgs e) { try { SqlConnection sqlConn = new SqlConnection("server= ;database= ;uid= ;pwd= "); sqlConn.Open(); SqlCommand sqlCmd = new SqlCommand("select*from " + textBox1.Text.Trim(), sqlConn); SqlDataReader sdr = sqlCmd.ExecuteReader(); sdr.Read(); if (sdr.HasRows) { MessageBox.Show("表中有值"); } else { MessageBox.Show("表中无值"); } } catch(Exception ex) { MessageBox.Show(ex.Message); } }
(3)读取数据
如果要读取数据表中的数据,通过ExecuteReader方法,根据SQL语句创造一个SqlDataReader对象之后,在调用SqlDataReader对象的read方法读取数据。read方法使qlDataReader前进到下一条记录,qlDataReader的默认位置是在第一条记录前面。因此,必须调用read方法访问数据。
语法:
public override bool Read() //说明:如果存在多个行,则返回值为true,否则为false。
对于每个关联的SqlConnection,一次只能打开一个SqlDataReader,在一个关闭之后,打开另一个的任何尝试都将失败。
2、数据适配器DataAdapter对象
DataAdapter对象的工作方式有两种:一种是通过Command对象执行SQL语句,从数据源中检索数据,并且将检索到的数据填充到DataSet对象。
另一种方法是把对DataSet对象所做的更改写入数据源。
(1)DataAdapter对象概述
DataAdapter独享是一个数据适配器对象,是DataSet和数据源之间的桥梁。DataAdampter对象提供了四个属性,实现和数据源之间的互通。
SelectCommand:向数据库发送查询SQL语句。
DeleteCommand:向数据库发送删除SQL语句。
InsertCommand:向数据库发送插入SQL语句。
UpdateCommand:向数据库发送更新SQL语句。
对数据库进行操作的时候,只要将这四个属性设置成相应的SQL语句即可。DataAdampter对象中还有几个主要的方法,具体如下:
Fill方法用数据填充DataSet。语法:
public int Fill(DataSet dataset,string srcTable) //dataSet表示要填充的数据集。srcTable表示用于表映射的源表的名称。该方法的返回值为已在DataSet中成功添加或刷新的行数,这不包括手不返回行的语句影响的行。
如果所连接的是SQLServer 数据库,则可以通过将SqlDataAdapter和关联的SqlCommand和SqlConnection对象一起使用,从而提高总体性能。
Update方法更新数据库的时候,DataAdapter将调用DeleteCommand、InsertCommand和UpdateCommand属性。语法:
public int Update(DataTable dataTable) //dataTable表示用于更新数据源的DataTable。该方法返回值DataSet中成功更新的行数。
(2)填充DataSet数据集
通过DataAdapter对象的Fill方法填充DataSet数据集。Fill方法使用Select语句从数据源中检索数据。和Select命令相关连的Connection对象必须有效,但是不需要将其打开。
public partial class Form1 : Form { SqlConnection sqlConn; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { SqlConnection sqlConn = new SqlConnection("server= ;database= ;uid= ;pwd= "); SqlCommand sqlCmd = new SqlCommand("select*from tb_command",sqlConn); SqlDataAdapter sda = new SqlDataAdapter(); sda.SelectCommand = sqlCmd; //创建一个Dataset对象 DataSet ds = new DataSet(); //使用SqlDataAdapter对象的Fill方法填充DataSet数据集 sda.Fill(ds,"cs"); dataGridView1.DataSource = ds.Tables[0]; } }
(3)更新数据源
使用DataAdapter对象的Update方法,可以将DataSet中修改过的数据及时的更新到数据库当中。在调用Update方法之前要实例化一个CommandBuilder类,自动根据DataAdapter的SelcetCommand的SQL语句判断其他的InsertCommand、UpdateCommand和DeleteCommand。这样就不需要设置DataAdapter的InsertCommand、UpdateCommand和DeleteCommand属性。直接使用Update方法来更新DataSet、DataTable或DataRow数组即可。
示例程序:
public partial class Form1 : Form { SqlConnection conn; DataSet ds; SqlDataAdapter sda; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { conn = new SqlConnection("server= ; database= ;uid= ;pwd= "); SqlCommand cmd = new SqlCommand("select*from tb_command",conn); sda = new SqlDataAdapter(); sda.SelectCommand = cmd; ds = new DataSet(); sda.Fill(ds,"cs"); dataGridView1.DataSource = ds.Tables[0];//设置这个控件的数据源 } private void button1_Click(object sender, EventArgs e) { DataTable dt=ds.Tables["cs"];//创建一个table隶属于ds sda.FillSchema(dt,SchemaType.Mapped);//把表的结构加载进入 DataRow dr = dt.Rows.Find(textBox1.Text);//创建一个datarow dr["name"] = textBox2.Text.Trim(); dr["age"] = textBox3.Text.Trim(); dr["sex"] = textBox4.Text.Trim(); dr["money"] = textBox5.Text.Trim(); SqlCommandBuilder cmdbuilder = new SqlCommandBuilder(sda); sda.Update(dt);//调用其将dt更新到数据库中 } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { //在点击事件中实现单机某条数据从而显示详细信息 textBox1.Text = dataGridView1.SelectedCells[0].Value.ToString(); textBox2.Text = dataGridView1.SelectedCells[1].Value.ToString(); textBox3.Text = dataGridView1.SelectedCells[2].Value.ToString(); textBox4.Text = dataGridView1.SelectedCells[3].Value.ToString(); textBox5.Text = dataGridView1.SelectedCells[4].Value.ToString(); } }
3、数据集:DataSet对象
DataSet也是ADO.NET的核心成员,支持ADO.NET断开式,分布式数据方案的核心对象。也是实现基于非连接的数据查询的核心组件。DataSet对象是创建在内存中的集合对象。相当于在内存中创建的一个小型关系数据库。
(1)DataSet对象概述
DataSet对象就像存放在内存中的一个小型数据库。可以包含数据表,数据列。数据行、视图、约束以及关系。通常DataSet的数据来源于数据库或者XML,为了从数据库中获取数据,需要使用数据适配器DataAdapter从数据库中查询数据。
语法如下:
sqlConn=new SqlConnection("server= ;database= ;uid= ;pwd= "); DataSet ds=new DataSet(); SqlDataAdapter sda=new SqlDataAdapter("select*from tb_mrkj",conn); sda.Fill(ds);
(2)使用DataSet合并数据
可以使用DataSet的Merge方法吧DataSet、DataTable 或者DataRow数组的内存并入现有的DataSet中。Merge方法将指定的DataSet及其框架和当前的DataSet合并,在此过程中,将根据给定的参数保留或者放弃在当前DataSet中的更改并且处理不兼容的架构。
语法:
public void Merge(DataSet dataset,bool presentChanges,MissingSchemaAction missingSchemaAction) //dataset表示将被合并到当前数据集中的DataSet实例;若要保留当前DataSet中的更改,则presentChanges的值为true。否则为false。MissingSchemaAction的值为MissingSchemaAction的枚举值之一。
DataSet对象为null的时候,无法进行合并。
示例程序:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } SqlCommand sqlConn = null; private void Form1_Load(object sender, EventArgs e) { sqlConn = new SqlCommand("server= ;database= ;uid= ;pwd= "); DataSet ds = new DataSet(); DataSet ds1 = new DataSet(); SqlDataAdapter sda = new SqlDataAdapter("select*from tb_man",sqlConn); sda.Fill(ds); SqlDataAdapter sda1 = new SqlDataAdapter("select*from tb_man", sqlConn); SqlCommandBuilder sb = new SqlCommandBuilder(sda1); sda1.Fill(ds1); ds1.Merge(ds,true,MissingSchemaAction.AddWithKey); dataGridView1.DataSource=ds1.Tables[0]; } }
4、数据浏览器:DataGridView
DataGridView控件通常用到的是数据浏览控件,操作简单而且灵活功能强大。
(1)概述
DataGridView提供一种强大而灵活的以表格形式显示数据的方式,可以使用DataGridView控件来显示少量数据的只读视图,也可以对其进行缩放以显示特大数据集的可编辑视图。使用DataGridView控件,可以显示和编辑来自多种不同类型的数据源的表格数据。将数据绑定到DataGridView控件,只需要设置DataSource属性即可。DataGridView控件具有极高的可配置性和可扩展性,提供了大量属性方法和事件,可以用来对控件的外观和行为进行自定义。
(2)在DataGridView中显示数据
通过DataGridView控件是显示数据表中的数据,首先需要使用DataAdapter对象查询指定的数据,然后通过该对象的Fill方法填充DataSet,最后设置DataGridView的DataSource属性为DataSet的表格数据。
DataGridView的DataSource属性用于获取或设置DataGridView控件所显示数据的数据源。
public Object DataSource{get;set;}
具体事例见前面的示例程序。
注意:显示数据的时候,可以利用Columns[列的索引号]属性的Visible属性设置为false,从而隐藏指定的列。
(3)获取DataGridView中的当前单元格
如果需要获取当前单元格的信息,可以通过读取DataGridView控件的CurrentCell属性来实现,该属性用于获取当前还在活动状态的单元格。
public DataGridViewCell CurrentCell{get;set;} //表示当前单元格的DataGridViewCell,如果没有单元格,那么就是空引用。默认值是第一列中的第一个单元格,如果控件中没有单元格,则为空引用。
注意:可以使用DataGridView控件中的SelectedCells集合属性来获取该控件中所有被选中的单元格信息。
示例程序:
string msg=String.Format("第{0}行,第{1}列",DataGridView1.CurrentCell.RowIndex,DataGridView1.CurrentCell.ColumnIndex); label1.Text=msg;
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- c#调用COM组件
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- C#实现把指定数据写入串口
- CentOS下DB2数据库安装过程详解
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值