电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> 数据库
实战VisualC#数据库编程-.NET教程,C#语言
作者:网友供稿 点击:10
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
[编者的话:]关于数据库编程,微软提供了一个统一的数据对象访问模型,在visual studio6.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。其中本地数据库名称为"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" ] ;

  得到了是同一数据源的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 ( ) , "错误!" ) ;
}
}
}

  下面代码是删除当前绑定组件显示的记录的程序代码,此代码是以sql server 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{
// 设定数据连接字符串,意思是打开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 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 ( ) , "错误!" ) ;
}
}
}

  在这二段代码中,在更改数据库的同时也对"datsset"对象进行了必要的修改。
下图是程序中对数据记录进行删除操作的运行界面:

     图01:删除记录


四.插入数据记录:

   对数据库进行插入记录操作和删除记录操作基本的思路是一致的,就是通过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 ;
}
文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·数据库开发个人总结(ADO.NET小结)-.NET教程,数据库应用
·怎么由DataSet将数据导入Excel?-.NET教程,数据库应用
·动态创建SQL Server数据库、表、存储过程-ASP教程,数据库相关
·Win32环境下动态链接库(DLL)编程原理-.NET教程,数据库应用
·封装的ADO.NET对数据库操作经典类-.NET教程,数据库应用
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·DataGrid使用心得(附大量代码)-ASP教程,数据库相关
·用代码创建DataGrid的多链接及checkbox事件响应-.NET教程,数据库应用
·ADO.NET 的最佳实践技巧-.NET教程,数据库应用
·转载: 用纯ASP代码实现图片上传并存入数据库中

最新文章
·根据数据表中数据,生成Powerpoint幻灯片-ASP教程,数据库相关
·DataGrid中的按钮反选事件与NamingContainer(命名容器)-downmoon-ASP教程,数据库相关
·使用用VB处理MYSQL数据库中二进制数据问题-.NET教程,VB.Net语言
·关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·.net下访问Access数据库需要注意的问题-.NET教程,Asp.Net开发
·ActiveMQ4.1+Spring2.0的POJO JMS方案(上)-.NET教程,数据库应用
·ASP.NET 2.0中直接将Access数据库导入到Excel文件中-.NET教程,Asp.Net开发
·NET(C#)连接各类数据库-集锦-.NET教程,C#语言
·ASP.NET2.0连接SQL Server数据库详解-.NET教程,Asp.Net开发


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号