`
isiqi
  • 浏览: 16491357 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Oledbadapter使用感受

阅读更多

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning /> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL /> <w:BalanceSingleByteDoubleByteWidth /> <w:DoNotLeaveBackslashAlone /> <w:ULTrailSpace /> <w:DoNotExpandShiftReturn /> <w:AdjustLineHeightInTable /> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:UseFELayout /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!-- [if !mso]> < classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui> </object> <mce:style><! st1\:*{behavior:url(#ieooui) } -->

答应帮同学写个程序,程序背景为:他们公司有许多应收、应付票据到期需要承兑,我同学希望将这些票据录入到程序中,为每张票据设置一个到期提醒日期,程序在到期提醒日提醒我同学有票据需要承兑,请处理即可。其实程序看上去很简单,但是实现起来还是花费了我 1 天时间。

首先,这是一个纯客户端小程序,因此用 java flex 等写就不是很适合了,考量再三还是用 vs2005 吧,因为只要 xp sp2 之后的操作系统都带了 .net 2.0 及以上的框架的,只要 vs2005 编译后的 exe 文件即可执行。

其次,由于需要存储票据信息、票据发生关系单位信息、票据承兑银行信息,因此需要文件或者数据库来保存这些信息。起初,打算使用搞 3 xml 文件来存储,后来考虑票据还是蛮多的, xml 操作起来有点费劲,而且本来 vs2005 自带的 xml 操作性能就不是很好,最后还是决定使用 access 数据库。可笑的是本人电脑上还没有 access 数据库软件,还是 csdn 上一位朋友帮我建好库、表给我发过来的。在此,谢谢那位仁兄了。

接下来就是用 vs2005 access 数据库如何实现我同学的功能需求了,经功能分解程序主要有 3 个窗体和系统托盘功能。

<!-- [if !supportLists]-->1) <!-- [endif]-->FrmBill :票据信息维护、查看窗体;

<!-- [if !supportLists]-->2) <!-- [endif]-->FrmCompany :对方单位选取弹出对话框,维护票据信息时,需要选择对方单位;

<!-- [if !supportLists]-->3) <!-- [endif]-->FrmBank :承兑银行选取弹出对话框,维护票据信息时,需要选择承兑银行;

<!-- [if !supportLists]-->4) <!-- [endif]-->系统托盘:由于程序需要电脑启动时就启动,因此程序启动起来之后直接最小化到系统托盘中,检查是否有到期提醒日的票据,有的话告知用户。

综合 FrmBill FrmCompany FrmBank3 个窗体其实功能一样,都是数据的增、删、改和保存。考虑之下使用 ado.net oledbadapter 来填充、更新数据。在我看来 oledbadapter 操作数据就做 4 件事情:

<!-- [if !supportLists]-->1) <!-- [endif]-->创建数据库连接;

<!-- [if !supportLists]-->2) <!-- [endif]-->构建 oledbadapter 实例;

<!-- [if !supportLists]-->3) <!-- [endif]-->绑定 oledbadapter selectcommand, updatecommand, insertcommand, deletecommand ,这步操作最为关键;

<!-- [if !supportLists]-->4) <!-- [endif]-->调用 oledbadapter fill 进行查询操作、 update 进行更新操作;

为什么设置了 oledbadapter updatecommand insertcommand deletecommand 之后,当 datagridview 发生数据变更时调用 oledbadapter.update 操作即可将 datagridview 数据变更提交到数据库?这里关键之处是 datagridview datasource datatable 其每一行都是有状态,如: deleted,new,normal 等, oledbadapter 就是根据其填充的 datatable 的行状态来提交增、删、改数据,提交完毕之后,调用 datatable acceptchange 重置 datatable 的行状态。

下述为 FrmBill 窗体, Oledbadapter 的核心代码。

string sql = "select invoicevo.*, duifangdanweivo.duifangname, bankvo.bankname from invoicevo, duifangdanweivo, bankvo where expirydate >=#2010-7-25# and invoicevo.bank = bankvo.bankid and invoicevo.duifangdanwei = duifangdanweivo.id" ;

adapter = new OleDbDataAdapter (sql,DBManager .getConn());

// 绑定insertcommand ,注意参数的顺序、类型

OleDbCommand insertCmd = new OleDbCommand ("insert into invoicevo(oid, billno,duifangdanwei,bank,billtype,status,expirydate,infodate,inputdate,[money],[note]) values(?,?,?,?,?,?,?,?,?,?,?)" , DBManager .getConn());

insertCmd.Parameters.Add("oid" , OleDbType .VarChar, 100, "oid" );

insertCmd.Parameters.Add("billno" , OleDbType .VarChar, 100, "billno" );

insertCmd.Parameters.Add("duifangdanwei" , OleDbType .VarChar, 100, "duifangdanwei" );

insertCmd.Parameters.Add("bank" , OleDbType .VarChar, 100, "bank" );

insertCmd.Parameters.Add("billtype" , OleDbType .VarChar, 100, "billtype" );

insertCmd.Parameters.Add("status" , OleDbType .VarChar, 100, "status" );

insertCmd.Parameters.Add("expirydate" , OleDbType .DBDate, 0, "expirydate" );

insertCmd.Parameters.Add("infodate" , OleDbType .DBDate, 0, "infodate" );

insertCmd.Parameters.Add("inputdate" , OleDbType .DBDate, 0, "inputdate" );

insertCmd.Parameters.Add("money" , OleDbType .Double, 0, "money" );

insertCmd.Parameters.Add("note" , OleDbType .VarChar, 100, "note" );

adapter.InsertCommand = insertCmd;

// 绑定 updateCmd ,注意参数的顺序、类型

OleDbCommand updateCmd = new OleDbCommand ("update invoicevo set billno=?, duifangdanwei=?, bank=?, billtype =?, status=?, expirydate=?, infodate=?," +

"inputdate=?, [money]=?,[note]=? where oid=?" , DBManager .getConn());

updateCmd.Parameters.Add("billno" , OleDbType .VarChar, 100, "billno" );

updateCmd.Parameters.Add("duifangdanwei" , OleDbType .VarChar, 100, "duifangdanwei" );

updateCmd.Parameters.Add("bank" , OleDbType .VarChar, 100, "bank" );

updateCmd.Parameters.Add("billtype" , OleDbType .VarChar, 100, "billtype" );

updateCmd.Parameters.Add("status" , OleDbType .VarChar, 100, "status" );

updateCmd.Parameters.Add("expirydate" , OleDbType .DBDate, 0, "expirydate" );

updateCmd.Parameters.Add("infodate" , OleDbType .DBDate, 0, "infodate" );

updateCmd.Parameters.Add("inputdate" , OleDbType .DBDate, 0, "inputdate" );

updateCmd.Parameters.Add("money" , OleDbType .Double, 0, "money" );

updateCmd.Parameters.Add("note" , OleDbType .VarChar, 100, "note" );

updateCmd.Parameters.Add("oid" , OleDbType .VarChar, 100, "oid" );

adapter.UpdateCommand = updateCmd;

// 绑定DeleteCommand ,注意参数的顺序、类型

OleDbCommand deleteCmd = new OleDbCommand ("delete from invoicevo where oid=?" , DBManager .getConn());

deleteCmd.Parameters.Add("oid" , OleDbType .VarChar, 100, "oid" );

adapter.DeleteCommand = deleteCmd;

// 填充数据======================================================

DataSet ds = new DataSet ();

adapter.Fill(ds);

dgv1.DataSource = ds.Tables[0];

// 保存数据======================================================

// 这句话一定要写,否则数据可能保存不进去

this .BindingContext[this .dgv1.DataSource].EndCurrentEdit();

adapter.Update((DataTable )dgv1.DataSource);

分享到:
评论

相关推荐

    ADO.NET精简教程(快速入门)

    SQL Server 7.0或以上版本使用SqlDataAdapter,OLE DB数据源使用OleDbAdapter。 DataSet对象:DataSet对象是服务器内存中的数据库,位于内存中的数据存储,负责对数据的操作。DataSet对象可以看作是数据库在内存中...

    根据excel创建shp文件

    之后,使用OleDbAdapter对象从Excel文件中获取数据,并填充到DataSet对象中。DataSet中保存了Excel表格的所有表格信息,可以根据需要选择特定的sheet。 在数据导入阶段,还需要注意处理Excel文件可能包含多个工作表...

    dataAdapter用法大全

    `SqlDataAdapter`和`OleDbAdapter`是最常见的两种`DataAdapter`对象,它们分别用于与SQL Server和OLE DB数据源交互。 **表:SqlDataAdapter类构造函数说明** | 函数定义 | 参数说明 | 函数说明 | |---------------...

    基于springboot共享经济背景下校园闲置物品交易平台源码数据库文档.zip

    基于springboot共享经济背景下校园闲置物品交易平台源码数据库文档.zip

    基于WoodandBerry1和非耦合控制WoodandBerry2来实现控制木材和浆果蒸馏柱控制Simulink仿真.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    emcopy042002.zip

    emcopy042002.zip

    (源码)基于Python的遥感图像语义分割系统.zip

    # 基于Python的遥感图像语义分割系统 ## 项目简介 本项目是一个基于Python的遥感图像语义分割系统,专注于处理和分析遥感图像数据。系统采用HRNet(High Resolution Network)架构,结合多尺度训练和翻转增强等技术,实现对图像的像素级分类,从而完成语义分割任务。 ## 项目的主要特性和功能 1. HRNet架构利用HRNet架构并行处理不同分辨率的特征,有效捕获图像细节和上下文信息,提升分割精度。 2. 多尺度训练支持多尺度训练,通过不同尺度的缩放和裁剪,增加数据多样性,提高模型泛化能力。 3. 翻转增强在训练过程中对图像进行随机翻转,增加数据集多样性,提高模型鲁棒性。 4. 预处理和增强提供多种预处理和增强技术,如随机色调、饱和度、亮度调整,以及平移、缩放、旋转等变换,用于扩充数据集和增强模型性能。

    (源码)基于Spring Boot的博客管理系统.zip

    # 基于Spring Boot的博客管理系统 ## 项目简介 本项目是一个基于Spring Boot框架的博客管理系统,旨在提供一个简单易用的博客平台,支持用户登录认证、文章管理、分类管理、标签管理等功能。项目主要用于学习和实践Spring Boot及相关技术,特别是登录认证和权限管理方面的内容。 ## 项目的主要特性和功能 1. 用户管理 用户注册、登录、信息更新。 用户权限管理,支持超级管理员和普通用户角色。 2. 文章管理 文章的创建、编辑、删除、恢复。 文章的分类和标签管理。 文章的发布状态管理(草稿、已发布、回收站)。 3. 分类管理 分类的添加、删除、更新。 分类信息的查询。 4. 标签管理 标签的添加、删除、更新。 标签与文章的关联管理。 5. 数据统计 文章的浏览量统计。 分类和标签的数据统计。

    基于springboot的中医院问诊系统源码数据库文档.zip

    基于springboot的中医院问诊系统源码数据库文档.zip

    基于SpringBoot+Vue的校园篮球联赛管理系统源码数据库文档.zip

    基于SpringBoot+Vue的校园篮球联赛管理系统源码数据库文档.zip

    基于springboot框架药品购买系统源码数据库文档.zip

    基于springboot框架药品购买系统源码数据库文档.zip

    人工智能开发项目深度学习项目源码带指导视频一起来动动手

    人工智能开发项目深度学习项目源码带指导视频一起来动动手提取方式是百度网盘分享地址

    (源码)基于Spring Boot和Vue的基金管理系统.zip

    # 基于Spring Boot和Vue的基金管理系统 ## 项目简介 本项目是一个基于Spring Boot和Vue框架的基金管理系统,旨在提供一个全面的基金管理解决方案。系统涵盖了基金的各个方面,包括账户管理、交易记录、报表生成、用户权限管理等功能。通过前后端分离的架构,系统能够高效地处理大量数据,并提供友好的用户界面。 ## 项目的主要特性和功能 ### 1. 用户管理 用户注册与登录支持用户注册和登录功能,确保用户身份的安全性。 用户权限管理根据用户角色分配不同的权限,确保系统的安全性。 ### 2. 账户管理 基金账户创建与管理支持创建和管理多个基金账户,记录账户的余额、交易记录等信息。 账户冻结与解冻支持账户的冻结和解冻操作,确保账户的安全性。 ### 3. 交易管理 交易记录管理记录所有的交易操作,包括买入、卖出、转账等。 交易报表生成自动生成交易报表,方便用户查看和分析交易情况。 ### 4. 报表与统计

    springboot316社团服务系统的设计与实现.zip

    论文描述:该论文研究了某一特定领域的问题,并提出了新的解决方案。论文首先对问题进行了详细的分析和理解,并对已有的研究成果进行了综述。然后,论文提出了一种全新的解决方案,包括算法、模型或方法。在整个研究过程中,论文使用了合适的实验设计和数据集,并进行了充分的实验验证。最后,论文对解决方案的性能进行了全面的评估和分析,并提出了进一步的研究方向。 源码内容描述:该源码实现了论文中提出的新的解决方案。源码中包含了算法、模型或方法的具体实现代码,以及相关的数据预处理、实验设计和性能评估代码。源码中还包括了合适的注释和文档,以方便其他研究者理解和使用。源码的实现应该具有可读性、可维护性和高效性,并能够复现论文中的实验结果。此外,源码还应该尽可能具有通用性,以便在其他类似问题上进行进一步的应用和扩展。

    (源码)基于Arduino的蒸发冷却系统.zip

    # 基于Arduino的蒸发冷却系统 ## 项目简介 本项目旨在创建一个蒸发冷却系统(即沼泽冷却器),这是一种在干燥炎热气候下提供能源效率替代空调的系统。该系统使用Arduino 2560和各种传感器来监控和控制冷却过程。 ## 项目的主要特性和功能 水位监控通过水位传感器监控水箱中的水位,并在水位过低时发出警报。 温度和湿度显示在LCD屏幕上显示空气温度和湿度。 风扇控制根据温度范围控制风扇电机。 系统开关通过用户按钮控制系统的开关。 日志记录记录电机激活和停用的时间和日期。 ## 安装使用步骤 2. 硬件连接按照项目文档中的电路图连接所有硬件组件,包括水位传感器、LCD显示屏、实时时钟模块、DHT11传感器和风扇电机。 3. 上传代码将下载的代码上传到Arduino 2560开发板。 4. 启动系统通过用户按钮启动系统,观察LCD屏幕上的温度和湿度显示,并监控水位传感器的状态。

    基于springboot的社区快递上门服务系统源码数据库文档.zip

    基于springboot的社区快递上门服务系统源码数据库文档.zip

    【多智能体任务分配】基于共识的捆绑算法CBBA实现远程太空船RPO 规划任务研究附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于RNN生成文本(自然语言处理)

    此代码基于PTB数据集,实现了一个具有一定泛化能力的语言模型。可指定初始单词和生成单词数生成文本

    【故障诊断】基于改进的稀疏周期组Lasso的轴承故障诊断Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    IEEE 14节点标准模型的柴油发电机、光伏模型、电池储能系统、电弧炉等非线性负载复合微电网模型Simulink仿真.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics