- 浏览: 603558 次
文章分类
- 全部博客 (411)
- 常用工具 (21)
- 喜好 (14)
- 英语 (3)
- java (51)
- ext (4)
- css (44)
- php (34)
- window (7)
- jquery (21)
- js (31)
- struts (4)
- tomcat (1)
- struts2 (11)
- 网络 (4)
- c# (7)
- linux (27)
- oracle (15)
- tag标签 (5)
- 生成静态页面 (6)
- sql (12)
- hibernate (13)
- DesignPattern (3)
- spring (2)
- flex (17)
- excel应用 (1)
- 报表 (2)
- 业界 (2)
- 数据建模 (1)
- 平板 (1)
- ppt (1)
- rich (1)
最新评论
-
youngdze:
受教了,谢谢!
十步解决php utf-8编码 -
DiLiya:
感谢你的讲解;帮了大忙了!
解决-innerHTML无法在TBODY中使用 -
eppen:
强的没话说。帮了大忙。感谢goby2008 ,感谢google ...
解决-innerHTML无法在TBODY中使用 -
cxs4808:
rr
flex 设计模式 -
liuxingvsyou:
3个jQuery弹出窗口插件
关于数据库编程,微软提供了一个统一的数据对象访问模型,在Visual Studio6.0中称为ADO,在.NET中则统一为ADO.NET,掌握ADO.NET就等于掌握了数据库编程的核心。
<script id="ad_text_pcjob" src="http://www.pconline.com.cn/script/ad_text_pcjob.js"></script>
针对数据库编程始终是程序设计语言的一个重要方面的内容,也是一个难点。数据库编程的内容十分丰富,但最为基本编程的也就是那么几点,譬如:连接数据
库、得到需要的数据和针对数据记录的浏览、删除、修改、插入等操作。其中又以后面针对数据记录的数据操作为重点。本文就来着重探讨一下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。其中本地数据库名称为"db.mdb",在其中定义了一张数据表"person","person"表的数据结构如下表:
<
字段名称 | 字段类型 | 字段意思 |
id | 数字 | 序号 |
xm | 文本 | 姓名 |
xb | 文本 | 性别 |
nl | 文本 | 年龄 |
zip | 文本 | 邮政编码 |
远程数据库Sql Server 2000的数据库服务器名称为"Server1",数据库名称为"Data1",登陆的ID为"sa",口令为空,在数据库也定义了一张"person"表,数据结构如上表。
二.如何浏览数据:
在《Visual
C#的数据绑定》中,已经了解了如何把数据集中的某些字段绑定到WinForm组件的某个属性上,这样程序员就可以根据以WinForm组件的来定制数据
显示的形式,并且此时的WinForm组件显示内容就可以随着记录指针的变化而改变。至此可见,浏览数据记录的关键就是如何改变记录指针。要实现这种操
作,就要使用到BindingManagerBase类,此类的主要作用是管理对于那些实现了对同一个数据源进行绑定的对象。说的具体些,就是能够使得
Windows窗体上的已经对同一数据源进行数据绑定的组件保持同步。在BindingManagerBase类中定义了一个属性"Position",
通过这个属性就可以改变BindingManagerBase对象中的数据指针。创建BindingManagerBase对象必须要使用到
BindingContext类,其实每一个由Control类中继承而得到的对象,都有单一的BindingContext对象,在大多数创建窗体中实
现数据绑定组件的BindingManagerBase对象是使用Form类的BindingContext来得到。下列代码是以Access
2000数据库为模型,创建的一个名称为"myBind"的BindingManagerBase对象。
//创建一个 OleDbConnection string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; string strCom = " SELECT * FROM person " ; file://创建一个 DataSet myDataSet = new DataSet ( ) ; myConn.Open ( ) ; file://用 OleDbDataAdapter 得到一个数据集 OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ; file://把Dataset绑定books数据表 myCommand.Fill ( myDataSet , "person" ) ; file://关闭此OleDbConnection myConn.Close ( ) ; myBind = this.BindingContext [ myDataSet , "person" ] ; |
下列代码是以Sql Server 2000数据库为模型,创建一个名称为"myBind"的BindingManagerBase对象。
//设定数据连接字符串,此字符串的意思是打开Sql server数据库, //服务器名称为server1,数据库为data1 string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; myConn.Open ( ) ; string strCom = " SELECT * FROM person " ; file://创建一个 DataSet myDataSet = new DataSet ( ) ; file://用 OleDbDataAdapter 得到一个数据集 OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ; file://把Dataset绑定person数据表 myCommand.Fill ( myDataSet , " person " ) ; file://关闭此OleDbConnection myConn.Close ( ) ; myBind = this.BindingContext [ myDataSet , "person" ] ; |
<script id="xmlscript" src="http://guide.pconline.com.cn/comment/commentService_js.jsp?Fri%20Apr%2024%202009%2018:31:34%20GMT+0800"></script><script>xmlscript.src="http://guide.pconline.com.cn/comment/commentService_js.jsp?"+(new Date()); </script>
得到了是同一数据源的BindingManagerBase对象,通过改变此对象的"Position"属性值,这样绑定数据的组件显示的数据就随之变化,从而实现导航数据记录。
< I > .导航按钮"上一条"实现方法:
<
protected void GoPrevious ( object sender , System.EventArgs e ) { if ( myBind.Position == 0 ) MessageBox.Show ( "已经到了第一条记录!" , "信息提示!" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; else myBind.Position -= 1 ; } |
< II > . 导航按钮"下一条"实现方法:
protected void GoNext ( object sender , System.EventArgs e ) { if ( myBind.Position == myBind.Count -1 ) MessageBox.Show ( "已经到了最后一条记录!", "信息提示!" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ; else myBind.Position += 1 ; } |
< III > . 导航按钮"至尾"实现方法:
protected void GoLast ( object sender , System.EventArgs e ) { myBind.Position = myBind.Count - 1 ; } < IV > . 导航按钮"至首"实现方法: protected void GoFirst ( object sender , System.EventArgs e ) { myBind.Position = 0 ; } |
注释:"Count"是BindingManagerBase对象的另外一个重要的属性,是数据集记录的总数。
三.实现删除记录:
在对数据记录进行操作的时候,有二点必须十分清晰:
其一:在对数据记录进行操作的时候,我想有一些程序员一定有这样一个疑惑,当对数据库服务器请求数据集的时候,就会产生"DataSet"对象,用以管
理数据集,这样如果这些对数据库服务器的请求非常多,同样也就会产生很多的"DataSet"对象,达到一定时候必然会使得数据库服务器崩溃。这种想法是
自然的,但和实际并不相符,因为"DataSet"对象并不是在服务器端产生的,而是在客户端产生的。所以面对众多的数据请求的时候对数据库服务器的影响
并不十分太大。
其二:记得在用Delphi编写三层数据模型的时候的,每一次对数据库的修改其实只是对第二层产生的数据集的修改,要
真正修改数据库,还必须调用一个另外的方法。在用ADO.NET处理数据库的时候,虽然处理的直接对象是数据库,但此时"DataSet"对象中的内容并
没有随之改变,而绑定的数据组件显示的数据又来源于"DataSet"对象,这样就会产生一个错觉,就是修改了的记录并没有修改掉,删除的记录并没有删除
掉。所以对数据记录进行操作的时候,在修改数据库后,还要对"DataSet"对象进行必要的修改,这样才能保证"DataSet"对象和数据库内容一
致、同步。下面代码是删除当前绑定组件显示的记录的程序代码,此代码是以Access 2000数据库为模板的:
protected void Delete_record ( object sender , System.EventArgs e ) { DialogResult r = MessageBox.Show ( "是否删除当前记录!" , "删除当前记录!" , MessageBoxButtons.YesNo, MessageBoxIcon.Question ) ; int ss = ( int ) r ; if ( ss == 6 ) // 按动"确定"按钮 { try{ file://连接到一个数据库 string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb " ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; myConn.Open ( ) ; string strDele = "DELETE FROM person WHERE id= " + t_id.Text ; OleDbCommand myCommand = new OleDbCommand ( strDele , myConn ) ; file://从数据库中删除指定记录 myCommand.ExecuteNonQuery ( ) ; file://从DataSet中删除指定记录 myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . Delete ( ) ; myDataSet.Tables [ "person" ] . AcceptChanges ( ) ; myConn.Close ( ) ; } catch ( Exception ed ) { MessageBox.Show ( "删除记录错误信息: " + ed.ToString ( ) , "错误!" ) ; } } } |
<script id="xmlscript" src="http://guide.pconline.com.cn/comment/commentService_js.jsp?Fri%20Apr%2024%202009%2018:32:03%20GMT+0800"></script><script>xmlscript.src="http://guide.pconline.com.cn/comment/commentService_js.jsp?"+(new Date()); </script>
四.插入数据记录:
对数据库进行插入记录操作和删除记录操作基本的思路是一致的,就是通过ADO.NET首先插入数据记录到数据库,然后对"DataSet"对象进行必要的修改。下列代码就是以Access 2000数据库为模型修改当前记录的代码:<
protected void Update_record ( object sender , System.EventArgs e ) { int i = myBind.Position ; try{ file://连接到一个数据库 string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb " ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; myConn.Open ( ) ; myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . BeginEdit ( ) ; file://从数据库中修改指定记录 string strUpdt = " UPDATE person SET xm = '" + t_xm.Text + "' , xb = '" + t_xb.Text + "' , nl = " + t_nl.Text + " , zip = " + t_books.Text + " WHERE id = " + t_id.Text ; OleDbCommand myCommand = new OleDbCommand ( strUpdt , myConn ) ; myCommand.ExecuteNonQuery ( ) ; myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . EndEdit ( ) ; myDataSet.Tables [ "person" ] . AcceptChanges ( ) ; myConn.Close ( ) ; } catch ( Exception ed ) { MessageBox.Show ( "修改指定记录错误: " + ed.ToString ( ) , "错误!" ) ; } myBind.Position = i ; } |
由于对Sql Server 2000数据记录修改操作和Access 2000数据记录修改操作的差异只在于不同的数据链接,具体的代码可以参考"删除数据记录"中的代码,在这里就不提供了。
五.插入数据记录: 和前面二种操作在思路是一致的,就是通过ADO.NET首先插入数据记录到数据库,然后对"DataSet"对象进行必要的修改。下列代码就是以Access 2000数据库为模型插入一条数据记录的代码
protected void Insert_record ( object sender , System.EventArgs e ) { try { file://判断所有字段是否添完,添完则执行,反之弹出提示 if ( t_id.Text != "" && t_xm.Text != "" && t_xb.Text != "" && t_nl.Text != "" && t_books.Text != "" ) { string myConn1 = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ; OleDbConnection myConn = new OleDbConnection ( myConn1 ) ; myConn.Open ( ) ; string strInsert = " INSERT INTO person ( id , xm , xb , nl , zip ) VALUES ( " ; strInsert += t_id.Text + ", '" ; strInsert += t_xm.Text + "', '" ; strInsert += t_xb.Text + "', " ; strInsert += t_nl.Text + ", " ; strInsert += t_books.Text + ")" ; OleDbCommand inst = new OleDbCommand ( strInsert , myConn ) ; inst.ExecuteNonQuery ( ) ; myConn.Close ( ) ; myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . BeginEdit ( ) ; myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . EndEdit ( ) ; myDataSet.Tables [ "person" ] . AcceptChanges ( ) ; } else { MessageBox.Show ( "必须填满所有字段值!" , "错误!" ) ; } } catch ( Exception ed ) { MessageBox.Show ( "保存数据记录发生 " + ed.ToString ( ) , "错误!" ) ; } } |
六.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 : Form { private 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 ( ) { try { file://创建一个 OleDbConnection string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ; OleDbConnection myConn = new OleDbConnection ( strCon ) ; string strCom = " SELECT * FROM person " ; file://创建一个 DataSet myDataSet = new DataSet ( ) ; myConn.Open ( ) ; file://用 OleDbDataAdapter 得到一个数据集 OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ; file://把Dataset绑定books数据表 myCommand.Fill ( myDataSet , "person" ) ; file://关闭此OleDbConnection myConn.Close ( ) ; } catch ( Exception e ) { MessageBox.Show ( "连接错误! " + e.ToString ( ) , "错误" ) ; } } private void InitializeComponent ( ) { file://添加控件,略 this.Name = "Data" ; this.Text = "Visual C#的数据库编程!" ; this.ResumeLayout(false) ; myBind = this.BindingContext [ myDataSet , "person" ] ; } protected void New_record ( object sender , System.EventArgs e ) { |
对于以Sql Server 2000数据库为模型的程序代码,只要把Data01.cs中的数据链接,即:
string myConn1 = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ; |
改换成:
string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " ; |
注释:此数据链接代表的意思是:打开Sql server数据库,服务器名称为server1,数据库为data1就可以得到Visual C#针对Sql Server 2000数据库为模板编程的完成源程序代码了。所以本文就不再提供了。
七.总结:
数据库编程始终是程序编程内容中的一个重点和难点。而以上介绍的这些操作又是数据库编程中最为基本,也是最为重要的内容。那些复杂的编程无非是以上这些处理的若干个叠加。
发表评论
-
C# 打包文件,制作EXE安装文件
2009-06-21 17:42 41401 新建安装部署项目 打开VS,点击新建项目,选择 ... -
"update语句的语法错误"解决
2009-06-20 22:34 2867最近做了一个用C#编写的"学籍管理系统"的 ... -
Access 通用数据访问类(asp.net 2.0 c#)
2009-06-19 16:39 982仿照以前收集的一个经典sql server数据访问类,稍做修改 ... -
C# OleDbCommand 和 OleDbDataReader 使用小结
2009-06-19 16:31 4296用代码直接说明好了. using System.Data; ... -
C#(winForm)写在公共类的几个常用方法
2009-04-29 16:05 2689C#(winForm)写在公共类的几个常用方法 /***** ... -
c#入门教程
2009-04-29 10:32 741c#入门教程
相关推荐
在进行Visual C#数据库编程之前,需要确保以下环境配置正确: 1. **操作系统**:建议使用视窗2000服务器版或更高版本的操作系统,以确保与.NET Framework的良好兼容性。 2. **数据访问组件**:需要安装Microsoft ...
### 实战Visual C#数据库编程:关键知识点解析 #### 核心知识点概览 - **ADO.NET**: 统一的数据对象访问模型,适用于.NET框架下的数据库编程。 - **数据库编程基础**: 包括连接数据库、数据检索、记录浏览、删除、...
Visual C#数据库编程(实例详解) 本资源主要介绍了使用Visual C#进行数据库编程的实例详解,涉及到数据库开发中用的类型、数据库连接、数据绑定、数据浏览等知识点。 一、数据库开发环境设置 在数据库开发中,需要...
《完全手册Visual C# 2008开发技术详解》是一部深入探讨C#编程语言及其在Visual Studio 2008环境下应用的权威指南。这本书旨在帮助开发者全面掌握C# 2008的各项核心技术和高级特性,为构建高效、稳定、可扩展的软件...
### ASP.NET数据库编程详解(C#版)知识点梳理 #### 一、ASP.NET概述与特点 - **ASP.NET**:由微软公司推出的一种基于.NET平台的Web应用程序开发技术。 - **特点**: - **高性能**:使用完全编译的代码而非传统的...
在学习《Visual C# 2008开发技术详解》的过程中,读者将深入理解如何使用C# 2008进行程序设计,包括但不限于对象导向编程、异常处理、多线程、文件I/O、网络通信、数据库访问等。此外,还会接触到UI设计、单元测试、...
6. **数据库编程**:讲述如何使用C# 2008进行数据库交互,包括SQL Server数据库连接、查询、事务处理等,以及LINQ to SQL和Entity Framework等ORM技术。 7. **XML和Web服务**:介绍XML的基本概念和在C#中的操作,...
《Visual C# 2008 控件使用范例详解》是针对C#编程语言中控件使用的一份宝贵资源,由范盛荣编著。这本书深入浅出地介绍了如何在Visual Studio 2008环境下利用.NET Framework进行C#应用开发时,有效地使用和操作各种...
数据库编程也是本书的重要部分。C# 2008可以通过ADO.NET框架连接和操作SQL Server数据库。学习者需要理解连接字符串、Command对象、DataAdapter和DataSet,以及如何执行SQL查询和存储过程。 此外,书中的实例可能...
### 在Visual C#中访问不同数据库的关键知识点 #### 一、引言 在现代软件开发中,数据库操作是一项基本且重要的任务。Visual C#作为.NET Framework的重要组成部分,提供了丰富的工具和API来支持开发者进行数据库...
### Visual C#操作Excel编程详解 #### 前言与背景 Excel,作为一款功能强大的电子表格软件,凭借其友好的用户界面、丰富的数据分析工具,成为办公自动化领域不可或缺的工具。在众多工作场景中,Excel被广泛用于...
《Visual C#2005开发技术详解》是一本深入探讨C#编程语言及其在Visual Studio 2005环境下应用的专业书籍。作为C#学习的优秀教材,它旨在帮助开发者掌握C#语言的核心概念、编程技巧以及在实际项目中的应用。 首先,...
《C#数据库开发实例大全》是一本专注于C#编程语言在数据库开发领域的实践指南,它深入浅出地讲解了如何运用ADO.NET这一强大的数据访问技术,涵盖了从桌面应用到Web应用的全方位数据库操作。这本书的核心内容包括以下...
在《完全手册Visual C# 2008开发技术详解》这本书中,读者将深入学习到上述所有知识点,并通过实例和练习进一步巩固。无论你是打算从事Windows桌面应用开发,还是Web开发,甚至是游戏开发,这本书都将为你提供坚实的...
### Visual C#中动态操作SQL Server数据库的知识点详解 #### 一、背景介绍 在现代软件开发中,数据库的应用无处不在。对于开发者而言,掌握如何有效地与数据库交互是一项非常重要的技能。Visual C#作为.NET ...
### 基于C#的SQLCE数据库编程详解 #### 引言 随着移动设备的普及与企业级应用的需求增长,对于嵌入式系统中本地数据库的开发需求日益凸显。SQL Server Compact Edition(简称SQLCE),是微软为移动设备和嵌入式系统...
《Visual C# 2008控件使用范例详解》是一本专注于C#编程语言在Windows应用程序开发中的实践指南,特别关注了控件的使用。这本书提供的全套代码旨在帮助开发者深入理解C#中各种控件的功能、用法以及如何在实际项目中...
Visual Studio 2008是Microsoft推出的一款集成开发环境(IDE),它包含了完整的工具和服务,支持多种编程语言,其中包括C#。Visual Studio 2008提供了一个统一的开发平台,可以用于开发各种类型的应用程序,包括Web...