【ACCESS精品源码栏目提醒】:网学会员ACCESS精品源码为您提供【精品】VisualC#数据库编程实战 - 其它资料参考,解决您在【精品】VisualC#数据库编程实战 - 其它资料学习中工作中的难题,参考学习。
Visual C#数据库编程实战〔编者的话:〕关于数据库编程,微软提供了一个统一的数据对象访问模型,在 VisualStudio6.0 中称为 ADO,在.NET 中则统一为 ADO.NET掌握 ADO.NET 就等于掌握了数据库编程的核心,因此有必要首先复习一下以前发表的《ADO.NET 完全攻略》。
针对数据库编程始终是程序设计语言的一个重要方面的内容,也是一个难点。
数据库编程的内容十分丰富,但最为基本编程的也就是那么几点,譬如:连接数据库、得到需要的数据和针对数据记录的浏览、删除、修改、插入等操作。
其中又以后面针对数据记录的数据操作为重点。
本文就来着重探讨一下 Visual C#数据库基本编程,即:如何浏览记录、修改记录、删除记录和插入记录。
一.程序设计和运行的环境设置: (1).视窗 2000 服务器版 (2).Microsoft Data Acess Component 2.6 以上版本 MDAC 2.6 (3)..Net FrameWork SDK Beta 2 为了更清楚的说明问题,在数据库的选用上,采用了当前比较典型的数据库,一个是本地数据库
Access 2000,另外一个是远程数据库 Sql Server 2000。
其中本地数据库名称为quotdb.mdbquot,在其中定义了一张数据表quotpersonquot,quotpersonquot表的数据结构如下表:字段名称 字段类型 字段意思id 数字 序号xm 文本 姓名xb 文本 性别nl 文本 年龄zip 文本 邮政编码 远程数据库 Sql Server 2000 的数据库服务器名称为quotServer1quot数据库名称为quotData1quot,登陆的 ID 为quotsaquot,口令为空,在数据库也定义了一张quotpersonquot表,数据结构如上表。
二.如何浏览数据: 在《Visual C#的数据绑定》中,已经了解了如何把数据集中的某些字段绑定到WinForm 组件的某个属性上,这样程序员就可以根据以 WinForm 组件的来定制数据显示的形式,并且此时的 WinForm 组件显示内容就可以随着记录指针的变化而改变。
至此可见,浏览数据记录的关键就是如何改变记录指针。
要实现这种操作,就要使用到BindingManagerBase 类,此类的主要作用是管理对于那些实现了对同一个数据源进行绑定的对象。
说的具体些,就是能够使得 Windows 窗体上的已经对同一数据源进行数据绑定的组件保持同步。
在 BindingManagerBase 类中定义了一个属性quotPositionquot,通过这个属性就可以改变 BindingManagerBase 对象中的数据指针。
创建 BindingManagerBase 对象必须要使用到 BindingContext 类,其实每一个由 Control 类中继承而得到的对象,都有单一的 BindingContext 对象,在大多数创建窗体中实现数据绑定组件的BindingManagerBase 对象是使用 Form 类的 BindingContext 来得到。
下列代码是以
Access 2000 数据库为模型,创建的一个名称为quotmyBindquot的 BindingManagerBase 对象。
//创建一个 OleDbConnectionstring strCon quot Provider Microsoft.Jet.OLEDB.4.0 Data Source db.mdbquot OleDbConnection myConn new OleDbConnection strCon string strCom quot SELECT FROM person quot file://创建一个 DataSetmyDataSet new DataSet myConn.Open file://用 OleDbDataAdapter 得到一个数据集OleDbDataAdapter myCommand new OleDbDataAdapter strCom myConn file://把 Dataset 绑定 books 数据表myCommand.Fill myDataSet quotpersonquot file://关闭此 OleDbConnectionmyConn.Close myBind this.BindingContext myDataSet quotpersonquot 下列代码是以 Sql Server 2000 数据库为模型,创建一个名称为quotmyBindquot的BindingManagerBase 对象。
// 设定数据连接字符串,此字符串的意思是打开 Sql server 数据库,服务器名称为server1数据库为 data1string strCon quotProvider SQLOLEDB.1 Persist Security Info False UserID sa Initial Catalog data1 Data Source server1 quot OleDbConnection myConn new OleDbConnection strCon myConn.Open string strCom quot SELECT FROM person quot file://创建一个 DataSetmyDataSet new DataSet file://用 OleDbDataAdapter 得到一个数据集OleDbDataAdapter myCommand new OleDbDataAdapter strCom myConn file://把 Dataset 绑定 person 数据表myCommand.Fill myDataSet quot person quot file://关闭此 OleDbConnectionmyConn.Close myBind this.BindingContext myDataSet quotpersonquot 得到了是同一数据源的 BindingManagerBase 对象,通过改变此对象的quotPositionquot属性值,这样绑定数据的组件显示的数据就随之变化,从而实现导航数据记录。
lt I gt .导航按钮quot上一条quot实现方法:protected void GoPrevious object sender System.EventArgs e if myBind.Position 0 MessageBox.Show quot已经到了第一条记录!quot quot信息提示!quot MessageBoxButtons.OK MessageBoxIcon.Information elsemyBind.Position - 1 lt II gt . 导航按钮quot下一条quot实现方法:protected void GoNext object sender System.EventArgs e if myBind.Position myBind.Count -1 quot quotMessageBox.Show quot已经到了最后一条记录! quot信息提示! MessageBoxButtons.OK MessageBoxIcon.Information elsemyBind.Position 1 lt III gt . 导航按钮quot至尾quot实现方法:protected void GoLast object sender System.EventArgs e myBind.Position myBind.Count - 1 lt IV gt . 导航按钮quot至首quot实现方法:protected void GoFirst object sender System.EventArgs e myBind.Position 0 注释:quotCountquot是 BindingManagerBase 对象的另外一个重要的属性,是数据集记录的总数。
实战 Visual C#数据库编程(中) www.CSharpCN.com 3/29/2003 CCN三.实现删除记录: lt/PgtltPgt 在对数据记录进行操作的时候,有二点必须十分清晰:lt/PgtltPgt 其一:在对数据记录进行操作的时候,我想有一些程序员一定有这样一个疑惑,当对数据库服务器请求数据集的时候,就会产生quotDataSetquot对象,用以管理数据集,这样如果这些对数据库服务器的请求非常多,同样也就会产生很多的quotDataSetquot对象,达到一定时候必然会使得数据库服务器崩溃。
这种想法是自然的,但和实际并不相符,因为quotDataSetquot对象并不是在服务器端产生的,而是在客户端产生的。
所以面对众多的数据请求的时候对数据库服务器的影响并不十分太大。
lt/PgtltPgt 其二:记得在用 Delphi编写三层数据模型的时候的,每一次对数据库的修改其实只是对第二层产生的数据集的修改,要真正修改数据库,还必须调用一个另外的方法。
在用 ADO.NET 处理数据库的时候,虽然处理的直接对象是数据库,但此时quotDataSetquot对象中的内容并没有随之改变,而绑定的数据组件显示的数据又来源于quotDataSetquot对象,这样就会产生一个错觉,就是修改了的记录并没有修改掉,删除的记录并没有删除掉。
所以对数据记录进行操作的时候,在修改数据库后,还要对quotDataSetquot对象进行必要的修改,这样才能保证quotDataSetquot对象和数据库内容一致、同步。
下面代码是删除当前绑定组件显示的记录的程序代码,此代码是以
Access 2000 数据库为模板的: lt/PgtltPgtprotected void Delete_record object sender System.EventArgs e DialogResult r MessageBox.Show quot是否删除当前记录!quot quot删除当前记录!quot MessageBoxButtons.YesNo MessageBoxIcon.Question int ss int r if ss 6 // 按动quot确定quot按钮tryfile://连接到一个数据库string strCon quot Provider Microsoft.Jet.OLEDB.4.0 Data Source db.mdb quot OleDbConnection myConn new OleDbConnection strCon myConn.Open string strDele quotDELETE FROM person WHERE id quot t_id.Text OleDbCommand myCommand new OleDbCommand strDele myConn file://从数据库中删除指定记录myCommand.ExecuteNonQuery file://从 DataSet 中删除指定记录myDataSet.Tables quotpersonquot . Rows myBind.Position . Delete myDataSet.Tables quotpersonquot . AcceptChanges myConn.Close catch Exception ed MessageBox.Show quot删除记录错误信息: quot ed.ToString quot错误!quot lt/PgtltPgt 下面代码是删除当前绑定组件显示的记录的程序代码,此代码是以 SqlServer 2000 数据库为模板的,二者的区别仅仅在于数据链接: lt/PgtltPgtprotected voidDelete_record object sender System.EventArgs e DialogResult r MessageBox.Show quot是否删除当前记录!quot quot删除当前记录!quot MessageBoxButtons.YesNo MessageBoxIcon.Question int ss int r if ss 6 // 按动quot确定quot按钮try// 设定数据连接字符串,意思是打开 Sql server 数据库,服务器名称为 server1数据库为data1string strCon quotProvider SQLOLEDB.1 Persist Security Info False User ID sa Initial Catalog data1 Data Source server1 quot OleDbConnection myConn new OleDbConnection strCon myConn.Open string strDele quotDELETE FROM person WHERE id quot t_id.Text OleDbCommand myCommand new OleDbCommand strDele myConn file://从数据库中删除指定记录myCommand.ExecuteNonQuery file://从 DataSet 中删除指定记录myDataSet.Tables quotpersonquot . Rows myBind.Position . Delete myDataSet.Tables quotpersonquot . AcceptChanges myConn.Close catch Exception ed MessageBox.Show quot删除记录错误信息: quot ed.ToString quot错误!quot lt/PgtltPgt 在这二段代码中,在更改数据库的同时也对quotDatsSetquot对象进行了必要的修改。
下图是程序中对数据记录进行删除操作的运行界面: lt/PgtltPgt 四.插入数据记录: lt/PgtltPgt 对数据库进行插入记录操作和删除记录操作基本的思路是一致的,就是通过 ADO.NET 首先插入数据记录到数据库,然后对quotDataSetquot对象进行必要的修改。
下列代码就是以
Access 2000 数据库为模型修改当前记录的代码:lt/PgtltPgtprotected void Update_record object sender System.EventArgs e int i myBind.Position tryfile://连接到一个数据库string strCon quot Provider Microsoft.Jet.OLEDB.4.0 Data Source db.mdb quot OleDbConnection myConn new OleDbConnection strCon myConn.Open myDataSet.Tables quotpersonquot . Rows myBind.Position . BeginEdit file://从数据库中修改指定记录string strUpdt quot UPDATE person SET xm quot t_xm.Text quot xb quot t_xb.Text quot nl quot t_nl.Text quot zip quot t_books.Text quot WHERE id quot t_id.Text OleDbCommand myCommand new OleDbCommand strUpdt myConn myCommand.ExecuteNonQuery myDataSet.Tables quotpersonquot . Rows myBind.Position . EndEdit myDataSet.Tables quotpersonquot . AcceptChanges myConn.Close catch Exception ed MessageBox.Show quot修改指定记录错误: quot ed.ToString quot错误!quot myBind.Position i lt/PgtltPgt 由于对 Sql Server 2000 数据记录修改操作和
Access 2000 数据记录修改操作的差异只在于不同的数据链接,具体的代码可以参考quot删除数据记录quot中的代码,在这里就不提供了。
实战 Visual C#数据库编程(下) www.CSharpCN.com 3/29/2003 CCN五.插入数据记录: 和前面二种操作在思路是一致的,就是通过 ADO.NET 首先插入数据记录到数据库,然后对quotDataSetquot对象进行必要的修改。
下列代码就是以
Access 2000 数据库为模型插入一条数据记录的代码protected void Insert_record object sender System.EventArgs e tryfile://判断所有字段是否添完,添完则执行,反之弹出提示if t_id.Text quotquot ampamp t_xm.Text quotquot ampamp t_xb.Text quotquot ampamp t_nl.Text quotquotampamp t_books.Text quotquot string myConn1 quot Provider Microsoft.Jet.OLEDB.4.0 Data Source db.mdbquot OleDbConnection myConn new OleDbConnection myConn1 myConn.Open string strInsert quot INSERT INTO person id xm xb nl zip VALUES quot strInsert t_id.Text quot quot strInsert t_xm.Text quot quot strInsert t_xb.Text quot quot strInsert t_nl.Text quot quot strInsert t_books.Text quotquot OleDbCommand inst new OleDbCommand strInsert myConn inst.ExecuteNonQuery myConn.Close myDataSet.Tables quotpersonquot . Rows myBind.Position . BeginEdit myDataSet.Tables quotpersonquot . Rows myBind.Position . EndEdit myDataSet.Tables quotpersonquot . AcceptChanges elseMessageBox.Show quot必须填满所有字段值!quot quot错误!quot catch Exception ed MessageBox.Show quot保存数据记录发生 quot ed.ToString quot错误!quot 同样对 Sql Server 2000 数据库进行插入记录操作和
Access 2000 数据库插入记录操作的差异也只在于不同的数据链接,具体的代码可以参考quot删除数据记录quot中的代码,在这里就不提供了。
六.Visual C#数据库编程的完成源代码和程序运行的主界面: 掌握了上面要点,编写一个完整的数据库编程的程序就显得非常容易了,下面是Visual C#进行数据库编程的完整代码(Data01.cs),此代码是以
Access 2000 数据库为模型设计的,具体如下:using System using System.Drawing using System.ComponentModel using System.Windows.Forms using System.Data.OleDb using System.Data public class Data : Formprivate System.ComponentModel.Container components null private Button lastrec private Button nextrec private Button previousrec private Button firstrec private TextBox t_books private TextBox t_nl private ComboBox t_xb private TextBox t_xm private TextBox t_id private Label l_books private Label l_nl private Label l_xb private Label l_xm private Label l_id private Label label1 private DataSet myDataSet private Button button1 private Button button2 private Button button3 private Button button4 private BindingManagerBase myBind public Data file://连接到一个数据库GetConnected // 对窗体中所需要的内容进行初始化InitializeComponent file://清除在程序中使用过的资源protected override void Dispose bool disposing if disposing if components null components.Dispose base.Dispose disposing public static void Main Application.Run new Data public void GetConnected tryfile://创建一个 OleDbConnectionstring strCon quot Provider Microsoft.Jet.OLEDB.4.0 Data Source db.mdbquot OleDbConnection myConn new OleDbConnection strCon string strCom quot SELECT FROM person quot file://创建一个 DataSetmyDataSet new DataSet myConn.Open file://用 OleDbDataAdapter 得到一个数据集OleDbDataAdapter myCommand new OleDbDataAdapter strCom myConn file://把 Dataset 绑定 books 数据表myCommand.Fill myDataSet quotpersonquot file://关闭此 OleDbConnectionmyConn.Close catch Exception e MessageBox.Show quot连接错误 quot e.ToString quot错误quot private void InitializeComponent file://添加控件,略this.Name quotDataquot this.Text quotVisual C#的数据库编程!quot this.ResumeLayoutfalse myBind this.BindingContext myDataSet quotpersonquot protected void New_record object sender System.EventArgs e t_id.Text myBind.Count 1 .ToString t_xm.Text quotquot t_xb.Text quotquot t_nl.Text quotquot t_books.Text quotquot protected void Insert_record object sender System.EventArgs e tryfile://判断所有字段是否添完,添完则执行,反之弹出提示if t_id.Text quotquot ampamp t_xm.Text quotquot ampamp t_xb.Text quotquot ampamp t_nl.Text quotquotampamp t_books.Text quotquot string myConn1 quot Provider Microsoft.Jet.OLEDB.4.0 Data Source db.mdbquot OleDbConnection myConn new OleDbConnection myConn1 myConn.Open string strInsert quot INSERT INTO person id xm xb nl zip VALUES quot strInsert t_id.Text quot quot strInsert t_xm.Text quot quot strInsert t_xb.Text quot quot strInsert t_nl.Text quot quot strInsert t_books.Text quotquot OleDbCommand inst new OleDbCommand strInsert myConn inst.ExecuteNonQuery myConn.Close myDataSet.Tables quotpersonquot . Rows myBind.Position . BeginEdit myDataSet.Tables quotpersonquot . Rows myBind.Position . EndEdit myDataSet.Tables quotpersonquot . AcceptChanges elseMessageBox.Show quot必须填满所有字段值!quot quot错误!quot catch Exception ed MessageBox.Show quot保存数据记录发生 quot ed.ToString quot错误!quot protected void Update_record object sender System.EventArgs e int i myBind.Position tryfile://连接到一个数据库string strCon quot Provider Microsoft.Jet.OLEDB.4.0 Data Source db.mdb quot OleDbConnection myConn new OleDbConnection strCon myConn.Open myDataSet.Tables quotpersonquot . Rows myBind.Position . BeginEdit file://从数据库中修改指定记录string strUpdt quot UPDATE person SET xm quot t_xm.Text quot xb quot t_xb.Text quot nl quot t_nl.Text quot zip quot t_books.Text quot WHERE id quot t_id.Text OleDbCommand myCommand new OleDbCommand strUpdt myConn myCommand.ExecuteNonQuery myDataSet.Tables quotpersonquot . Rows myBind.Position . EndEdit myDataSet.Tables quotpersonquot . AcceptChanges myConn.Close catch Exception ed MessageBox.Show quot修改指定记录错误: quot ed.ToString quot错误!quot myBind.Position i protected void Delete_record object sender System.EventArgs e DialogResult r MessageBox.Show quot是否删除当前记录!quot quot删除当前记录!quot MessageBoxButtons.YesNo MessageBoxIcon.Question int ss int r if ss 6 // 按动quot确定quot按钮tryfile://连接到一个数据库string strCon quot Provider Microsoft.Jet.OLEDB.4.0 Data Source db.mdb quot OleDbConnection myConn new OleDbConnection strCon myConn.Open string strDele quotDELETE FROM person WHERE id quot t_id.Text OleDbCommand myCommand new OleDbCommand strDele myConn file://从数据库中删除指定记录myCommand.ExecuteNonQuery file://从 DataSet 中删除指定记录myDataSet.Tables quotpersonquot . Rows myBind.Position . Delete myDataSet.Tables quotpersonquot . AcceptChanges myConn.Close catch Exception ed MessageBox.Show quot删除记录错误信息: quot ed.ToString quot错误!quot file://按钮quot尾记录quot对象事件程序protected void GoLast object sender System.EventArgs e myBind.Positio.