DataReader对象读取数据与DataAdapter、DataSet对象操作数据
目录
1、DataReader使用案例:
2、给DataAdapter对象的selectCommand属性赋值
3、综合地使用DataTable、DataColumn和DataRow对象进行数据库操作
4、使用Table名来访问DataTable
5、使用Rows属性访问数据记录
6、使用Rows属性,访问指定行的指定字段
7、综合使用DataRow和DataColumn访问DataTable内的数据
8、使用DataSet和DataAdapter对象访问数据库
9、利用DataAdapter对象填充DataSet对象
10、使用DataAdapter对象,将DataSet中的数据更新到数据库
DataReader:负责读取数据库中的数据
DataAdapter:负责在Command对象执行完SQL语句后生成并填充DataSet和DataTable。(相当于一个连接桥,或是连接池)
DataSet:即数据集。DataSet为数据提供一种与数据无关的内存驻留表示形式。负责存取和更新数据
用法:
1、只有查询、读取操作时,调用DataReader对象
2、增、删、改操作时,需要先调用DataAdapter对象连接数据库,再调用DataSet对象
1、DataReader使用案例:
namespace DataReader Test { public partial class Forml: Form { public Forml () { InitializeComponent(); } private void Form1 Load (object sender, EventArgs e) { //定义输出消息 string message="" //新建连接对象 SqlConnection conn=new SqlConnection(); conn.ConnectionString="Data Source=(local); Initial Catalog= stu; Integrated Security=SSPI"; //拼接命令字符串 string selectQuery="select ID, sName, zy, bi from StuInfo" //新建命令对象 SqlCommand cmd=new SqlCommand(selectQuery, conn); //关闭阅读器时将自动关闭数据库连接 conn.Open(); SqlDataReader reader=cmd.ExecuteReader(CommandBehavior.CloseConnection); //循环读取信息 while(reader.read()) { message+="学号"+reader[0].ToString()+" "; message+="姓名"+reader["sName"].ToString()+" "; message+="专业"+reader.GetString(2)+" "; message+="班级"+reader.GetString(3)+" "; message+="\n"; } //关闭数据阅读器 //无须关闭连接,它将自动被关闭 reader.Close(); //测试数据连接是否已经关闭 if(conn.State==ConnectionState.Closed) { message+="数据连接已经关闭\n"; } MessageBox.Show(message); } } }
2、给DataAdapter对象的selectCommand属性赋值
//连接字符串 SqlConnection conn; //创建连接对象conn语句 conn=new Sqlconnection(str) //创建DataAdapter对象 SqlDataAdapter da=new SqlDataAdapter; //给DataAdapter对象SelectCommand属性赋值 da.SelectCommand=new SqlCommand("select * from student",conn); ...
同样,可以使用上述方式给其他的InsertCommand、DeleteCommand和UpdateCommand属性赋值。
3、综合地使用DataTable、DataColumn和DataRow对象进行数据库操作
private void DemonstrateRowBeginEdit() { //创建DataTable对象 DataTable table=new DataTable("table1"); //创建DataColumn对象,并设置其属性为Int32类型 DataColumn column=new DataColumn("col1",Type.GetType("System.Int32")); //添加Column到dataTable中 table.Columns.Add(column); //使用for循环,创建5个DataRow对象并添加到DataTable中 DataRow newRow; for(int i=0;i<5;i++){ newRow=table.NewRow(); newRow[0]=i; table.Rows.Add(newRow); } //使用dataTable的AcceptChanges()方法,将更改提交到数据库中 table.AcceptChanges(); //开始操作DataRow中的每个对象 foreach(DataRow row in table.Rows){ // row.BeginEdit(); row[0]=() row[0]+10 } table.Rows[0].BeginEdit(); table.Rows[1].BeginEdit(); table.Rows[0][0]=100; table.Rows[1][0]=100; //终止对DataRow对象进行操作 table.Rows[0].EndEdit(); table.Rows[1].EndEdit(); }
4、使用Table名来访问DataTable
DataSet ds=new DataSet(); DataTable dt=new DataTable("myTableName"); //向DataSet的Table里添加一个dataTable,DataSet就是一个Table集合 ds.Tables.Add(dt); //访问dataTable //1、通过表名访问 ds.Tables["myTableName"].NewRow();
5、使用Rows属性访问数据记录
foreach(DataRow row in table.Rows){ Row[0]=(int) row[0]+10; }
6、使用Rows属性,访问指定行的指定字段
//首先为DataTable对象创建一个数据列 DataTable table=new DataTable("table1"); DataColumn column=new DataColumn("col1",Type.GetType("System.Int32")); table.Columns.Add(column); //其次为DataTable添加行数据 newRow=table.NewRow(); newRow[0]=10; table.Rows.Add(newRow); //设置索引行是0,列名是col1的数据 table.Rows[0]["col1"]=100;
7、综合使用DataRow和DataColumn访问DataTable内的数据
foreach(DataRow dr in dt.Rows){ foreach(DataColumn dc in dt.Columns){ //用数组访问数据 Dr[dc]=100; } }
8、使用DataSet和DataAdapter对象访问数据库
//省略获得连接对象的代码 ... //创建 DataAdapter string sql="select*from student"; SqlDataAdapter sda=new SqlDataAdapter(sql,conn); //创建并填充 Dataset DataSet ds=new Dataset(); sda.fill(ds, "student"); //给 Dataset创建一个副本,操作对副本进行,以免因误操作而破坏数据 DataSet dsCopy=ds.Copy (); DataTable dt=ds.Table["student"]; //对 Datalable中的 DataRow和 DataColumn对象进行操作 ... //最后将更新提交到数据库中 sda.update(ds, "student")
9、利用DataAdapter对象填充DataSet对象
private static string strConnect=" data source=localhost; uid=sa;pwd=123456;database=Stu"; string sqlstr="select * from student"; //利用构造函数,创建 DataAdapter SqlDataAdapter da=new sqlDataAdapter(sqlstr, strConnect); //创建 Dataset DataSet ds=new DataSet(); //填充,第一个参数是要填充的 dataset对象,第二个参数是填充 dataset的 datatable表名 da.Fill(ds, "student");
10、使用DataAdapter对象,将DataSet中的数据更新到数据库
private static string strConnect ="data source=localhost;uid=sa;pwd=123456;database=Stu"; string sqlstr="select * from student"; //利用构造函数,创建DataAdapter SqlDataAdapter da=new SqlDataAdapter(sqlstr,strConnect); //创建DataSet DataSet ds=new DataSet(); //填充,第一个参数是要填充的dataset对象,第二个参数是填充dataset的datatable表名 da.Fill(ds,"student"); //以下代码将更新DataSet里的数据 //在DataSet里的名为“student”的DataTable里添加一个用于描述行记录的DataRow对象 DataRow dr=ds.Tables["student"].NewRow(); //通过DataRow对象添加一条记录 dr["stuid"]="ID2"; dr["stuname"]="tom"; ds.Tables["student"].Rows.Add(dr); //更新到数据库里 SqlCommandBuilder scb=new SqlCommandBuilder(da); da.Update(ds,"student");