c#第5讲-c#数据库教程_第1页
c#第5讲-c#数据库教程_第2页
c#第5讲-c#数据库教程_第3页
c#第5讲-c#数据库教程_第4页
c#第5讲-c#数据库教程_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章c#数据库编程

2本章知识点ADO.NETADO.NET简介ADO.NET是在ADO〔ActiveXDataObjects〕根底上开展的新一代数据存取技术,是微软.NET平台下提出的新的数据访问模型。ADO.NET设计了一系列对各类数据的访问形式,并提供了对应的类,类中提供了与对应数据交互的属性和方法,我们可以通过这些属性和方法对各种数据进行存取操作。ADO.NET数据访问模型ADO.NET访问的数据源针对不同的数据源,,使用不同名称空间的数据访问类库,即数据提供程序。常用的数据源包括四种:(1)MicrosoftSQLServer数据源使用名称空间.(2)OLEDB数据源使用名称空间.(3)ODBC数据源使用名称空间.(4)Oracle数据源使用名称空间

Connection对象在ADO.NET中,Connection对象主要用来连接到指定的数据源。Connection对象有两个常用方法:open():翻开连接Close():断开连接下面的代码演示了连接sqlserver2000数据库的一个类。Connection对象usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data.SqlClient;namespacewinexampe{classConnstr{publicConnstr(){}publicSqlConnectiongetcon(){stringsqlcon="DataSource=(local);Database=图书管理系统;Userid=sa;PWD=";SqlConnectionmycon=newSqlConnection(sqlcon);returnmycon;}}}Command对象4-1Command对象用于对数据源执行SQL语句或存储过程。使用Command对象之前,首先要连接数据源。Command对象中的ExecuteNonQuery()方法用来执行SQL语句,完成对数据库的操作。下面的例子演示了向“图书管理系统”数据库的“学生信息表”添加一条记录。Command对象4-2usingSystem.Data.SqlClient;usingSystem.Data;namespacewinexampe{

classdatabaseexe{publicdatabaseexe(){}Connstrconnstr=newConnstr();//执行sql

publicvoidsqlcmd(stringsqlstr){SqlConnectionconn=connstr.getcon();conn.Open();SqlCommandscmd=newSqlCommand(sqlstr,conn);scmd.ExecuteNonQuery();conn.Close();}}}privatevoidbutton1_Click(objectsender,EventArgse){stringxh=textBox1.Text.ToString().Trim();stringxm=textBox2.Text.ToString().Trim();stringxb=comboBox1.Text.ToString().Trim();stringjszh=textBox3.Text.Trim();

stringsqlstr="insertinto学生信息表(学号,姓名,系别,借书证号)values('"+xh+"','"+xm+"','"+xb+"','"+jszh+"')";dbexe.sqlcmd(sqlstr);MessageBox.Show("数据保存成功!");}Command对象4-3Command对象4-4数据集DateSet2-1数据集DateSet是ADO.NET的重要组件,可以把DateSet当成内存中的数据库.DateSet是不依赖于数据库的独立数据集合.所谓的独立,就是说即使短开数据链路,或关闭数据库,DateSet依然可用.DateSet对象具有3个特性:离线数据访问--大大减少了数据库效劳器的负荷DateSet对象以XML形式存储数据--这使得在内存中筛选数据及对其排序变得容易。同样把数据转成其他格式,将数据写入另一个数据存储或者数据的恢复都变得简单。独立性—DateSet独立于各种数据源注意:DateSet中所有数据都是加载在内存中执行的,提高了数据的访问速度,同时提高了硬盘数据的平安性.数据集DateSet2-2在实际应用中,数据集DateSet的使用有3种:把数据库中数据通过数据适配器DataAdapter对象填充到DateSet中.通过数据适配器DataAdapter对象操作DateSet实现数据的更新.把XML或文本数据加载到DateSet适配器DataAdapter对象DataAdapter对象充当DataSet和数据源之间用于检索和保存数据的桥梁.作为DataSet对象和数据源之间的桥接器,通过调用其Fill()方法向DataSet填充数据,通过调用其Update()方法将数据集dataSet中的数据回传至数据源。根据数据源的不同,ADO.NET提供了相关的适配器,比方OleDbDataAdapter和SqlDataAdapter分别用于Access数据库和sqlserver数据库。利用DataAdapter填充数据到DataSet下面的代码演示了把数据库表填充DataSet中usingSystem.Data.SqlClient;usingSystem.Data;namespacewinexampe{classdatabaseexe{publicdatabaseexe(){}

Connstrconnstr=newConnstr();

publicDataSetgetdataset(stringsql,stringtable){SqlConnectionconn=connstr.getcon();conn.Open();

SqlDataAdaptersda=newSqlDataAdapter(sql,conn);DataSetds=newDataSet();sda.Fill(ds,table);conn.Close();returnds;}}}操作DataSet中的表7-1操作DataSet中的表7-2一个DataSet可以填充多个表。用DataSet.Tables[index]来表示DataSet中的表。其中Index是一个大于等于0的整数,表示该表在DataSet中的索引值。假设ds为DataSet的一个具体对象,ds中包含3个表。那么ds.Tables[0];ds.Tables[1];ds.Tables[2];依次表示第1、第2和第3个表。操作DataSet中的表7-3下面的代码演示了向一个dataset对象中填充3个表Connstrconn=newConnstr();SqlConnectionconnstr=conn.getcon();connstr.Open();DataSetds=newDataSet();SqlDataAdapterada=newSqlDataAdapter("select*from图书类别",connstr);ada.Fill(ds,"图书类别");SqlDataAdapterada1=newSqlDataAdapter("select*from图书明细表",connstr);ada1.Fill(ds,"图书明细表");SqlDataAdapterada2=newSqlDataAdapter("select*from借出信息表",connstr);ada2.Fill(ds,"借出信息表");

操作DataSet中的表7-4DataSet中的表可以定义关系。定义关系需要使用DataSet的Relations对象,该对象有一个Add方法用来添加关系。例如,我们给,“图书类别“和”图书明细表“表添加一个关系。代码如下:操作DataSet中的表7-5Connstrconn=newConnstr();SqlConnectionconnstr=conn.getcon();connstr.Open();DataSetds=newDataSet();SqlDataAdapterada=newSqlDataAdapter("select*from图书类别",connstr);SqlCommandBuilderscb=newSqlCommandBuilder(ada);ada.Fill(ds,"图书类别");SqlDataAdapterada1=newSqlDataAdapter("select*from图书明细表",connstr);ada1.Fill(ds,"图书明细表");ds.Relations.Add("图书详细",ds.Tables[“0"].Columns["类别编号"],ds.Tables[“1"].Columns["类别编号"]);

操作DataSet中的表7-6输出DataSet中表的结构〔表头〕,用如下方法:da.Fill(ds,"Orders");DataTabletbl=ds.Tables[0];

foreach(DataColumncolintbl.Columns){

Console.WriteLine(col.ColumnName);

}注意:ds.Tables[0].Columns.Count可以获得列的总数操作DataSet中的表7-7输出DataSet中表的行数据,方法如下:for(intj=0;j<ds.Tables[0].Rows.Count;j++){for(intk=1;k<ds.Tables[0].Columns.Count;k++){

Console.WriteLine(ds.Tables[0].Rows[j][k]);}}注意:ds.Tables[0].Row.Count可以获得列行的总数DataTableDataTable是一个临时保存数据的网格虚拟表。它是ADO.NET中的一个对象。实例化一个DataTable,其语法如下:

DataTableDt=new

DataTable();DataTable使用很灵活,我们可以把DataSet中的表赋给一个DataTable,也可以直接把数据库中的表通过DataAdapter直接填充为DataTable,甚至还可以自己定义一个DataTable。DataTable把DataSet中的表赋给一个DataTable。代码如下:Connstrconn=newConnstr();SqlConnectionconnstr=conn.getcon();connstr.Open();DataSetds=newDataSet();stringsql=“select*from图书类别",;SqlDataAdapterada=newSqlDataAdapter(sql,connstr);ada.Fill(ds,"图书类别");DataTabledt=newDataTable();dt=ds.Tables[0];

DataTable直接把数据库中的表通过DataAdapter直接填充为DataTable.Connstrconn=newConnstr();SqlConnectionconn=connstr.getcon();conn.Open();SqlDataAdaptersda=newSqlDataAdapter(sql,conn);DataTabledt=newDataTable();sda.Fill(dt);DataTable自定义DataTable内容,主要涉及到DataTable对象的Columns、Rows对象和相应的方法。DataTablelist=newDataTable();

list.Columns.Add(newDataColumn("Display",typeof(string)));

list.Columns.Add(newDataColumn("Value",typeof(string)));

list.Clear();list.Rows.Add(list.NewRow());

list.Rows.Add(list.NewRow());

list.Rows.Add(list.NewRow());list.Rows[0][0]="大于";

list.Rows[0][1]=">";list.Rows[1][0]="小于";

list.Rows[1][1]="<";list.Rows[2][0]="等于";

list.Rows[2][1]="=";DataTableforeach(DataColumndcinDt.Colmns)

{

Console.WriteLine(dc.ColumnName);

}foreach(DataRowdrinDt.Rows)

{

foreach(DataColumndcinDt.Colmns)

{

Console.WriteLine(dr[dc]);

}

buffer.Append("\r\t");}通过Foreach循环遍历DataTable的行和列

显示DataSet中的数据4-1下面的代码演示了把DataSet中的数据显示到控件dataGridView中。databaseexedbexe=newdatabaseexe();privatevoidshjk1_Load(objectsender,EventArgse){SqlConnectionconnstr=conn.getcon();connstr.Open();stringsql="select*from学生信息表";DataSetds;ds=dbexe.getdataset(sql,"学生信息表");dataGridView1.DataSource=dbexe.getdataset(sql,"学生信息表").Tables[0];}显示DataSet中的数据4-2下面的代码演示了把DataSet中的数据显示到控件ListView控件中。效果如下:databaseexedbexe=newdatabaseexe();privatevoidListViewFrm_Load(objectsender,EventArgse){this.listView1.FullRowSelect=true;this.listView1.GridLines=true;stringsql="select*from图书明细表where出版社='清华大学出版社'";DataSetds=dbexe.getdataset(sql,"图书明细表");listView1.Clear();//以下代码显示表头

ColumnHeaderch;for(inti=0;i<ds.Tables[0].Columns.Count;i++){ch=newColumnHeader();ch.Text=ds.Tables[0].Columns[i].ColumnName.ToString();ch.Name=ds.Tables[0].Columns[i].ColumnName.ToString();ch.Width=90;this.listView1.Columns.Add(ch);}显示DataSet中的数据4-3显示DataSet中的数据4-4listView1.Items.Clear();ListViewItemlvitem=null;for(intj=0;j<ds.Tables[0].Rows.Count;j++){lvitem=newListViewItem(ds.Tables[0].Rows[j][0].ToString());for(intk=1;k<ds.Tables[0].Columns.Count;k++){lvitem.SubItems.Add(ds.Tables[0].Rows[j][k].ToString());}listView1.Items.Add(lvitem);}}数据的修改数据的修改第1步设计界面如下:数据的修改第2步双击Frmxg窗体,在窗体Frmxg的Load事件中编写如下代码://绑定dataset到dataGridView1privatevoidFrmxg_Load(objectsender,EventArgse){stringsql="select*from学生信息表";dataGridView1.DataSource=dbexe.getdataset(sql,"学生信息表").Tables[0];}数据的修改第3步为dataGridView1的CellClick事件编写代码,实现单击dataGridView1的行时,把数据传到文本框中。privatevoiddataGridView1_CellClick(objectsender,DataGridViewCellEventArgse){stringxh,xm,xb,jszh;xh=dataGridView1.CurrentRow.Cells[0].Value.ToString();xm=dataGridView1.CurrentRow.Cells[1].Value.ToString();xb=dataGridView1.CurrentRow.Cells[2].Value.ToString();jszh=dataGridView1.CurrentRow.Cells[3].Value.ToString();this.textBox1.Text=xh;this.textBox2.Text=xm;this.textBox4.Text=xb;this.textBox3.Text=jszh;}数据的修改第4步为确定按钮的Click事件编写代码,修改数据并传到数据库中。代码如下:privatevoidbutton1_Click(objectsender,EventArgse){stringsql;stringxh=this.textBox1.Text;stringxm=this.textBox2.Text;stringxb=this.textBox4.Text;stringjszh=this.textBox3.Text;sql="update学生信息表set姓名='"+xm+"',系别='"+xb+"',借书证号='"+jszh+"'where学号='"+xh+"'";dbexe.sqlcmd(sql);MessageBox.Show("数据修改成功!");}数据绑定浏览数据记录的关键就是如何改变记录指针。要实现这种操作,就要使用到BindingManagerBase类,此类的主要作用是管理对于那些实现了对同一个数据源进行绑定的对象。WinForm数据绑定为控件绑定数据需要使用CurrencyManager和BindingContext类。CurrencyManager为位于命名空间中,它从继承了类BindingManagerBase所有的属性和方法。CurrencyManager类的属性如下:

Bindings属性:用来获取该对象管理的所有绑定〔Binding)对象。而Binding对象中又包含与该绑定相关的控件〔Control属性〕、数据源〔DataSource)和被绑定的属性名称〔PropertyName)等信息。Count属性:返回该对象管理的数据行的数目。Current属性:用来获取当前行对象,通常是一个DataRowView对象。Position属性:用来获取或设置当前行的索引。其中,第1行的索引为0,最后一行的索引为Count-1。40WinForm数据绑定BindingContext对象:用来管理窗体中的所有BindingManagerBase对象,它也位于命名空间中。每个控件都包含一个BindingContext属性,可以通过这个属性来创立或获取与它所包含的数据绑定控件相关联的BindingManager。注意:每个控件都有一个DataBindings属性,这是一个集合,包含该控件中的所有绑定〔Binding)对象。可以使用这个属性来为控件添加数据绑定。41WinForm数据绑定窗体中各个控件的数据同步,可以按如下步骤进行:1、定义数据集:DataSet2、为BindingManagerBase对象设置数据源3、为各个控件绑定数据4、设置记录的移动,即使用BindingManagerBase对象的position属性4243Connstrconn=newConnstr();SqlConnectionconnstr=conn.getcon();connstr.Open();DataSetds=newDataSet();stringsql="select*from学生信息表",;SqlDataAdapterada=newSqlDataAdapter(sql,connstr);ada.Fill(ds,"学生信息表");privateBindingManagerBasemybind;dataGridView1.DataSource=ds.Tables[0];mybind=this.BindingContext[ds.Tables[0]];textbox1.DataBindings.Add("text",ds.Tables[0],"name");Combobox绑定数据3-1Combobox绑定数据如以下图所示:Combobox绑定数据3-2Combobox的几个属性:DataSource:为Combobox控件指定一个数据集,数据集可以是DataSet对象也可以是DataTable对象。DisplayMember:为Combobox控件指定要显示的值,它的值通常是数据集中的一个列名,即字段名。ValueMembe:为Combobox控件的项指定实际值,它的值通常是数据集中的一个列名,即字段名。SelectedIndex:指定Combobox控件的初始项的索引,它通常是个大于等于0的整数。下面演示把图书类别中的数据邦定到一个Combobox中。DbOperationdbop=newDbOperation();//实例化操作数据的类stringsql="select*from图书类别";DataTabledt=newDataTable();dt=dbop.GetTable

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论