dataset更新数据的问题

98、深入探索DataSet更新与DataForm向导应用 本文深入探讨了DataSet更新过程中遇到的挑战,包括错误处理复杂、数据冲突、身份列冲突和约束问题等,并介绍了使用Visual Studio的DataForm向导创建和优化数据输入表单的方法。通过添加ListBox、ComboBox控件提升用户体验,并讨论了数据输入验证和表单鲁棒性的改进策略。最后总结了关键知识点,并展望了未来数据处理工具的发展方向。 阅读详情

                OracleConnection conn = new OracleConnection("data source=FFPD;user=wanli;password=wanli123;");
                OracleDataAdapter adapter = new OracleDataAdapter("select * from test where pkey = 7 ",conn);
                DataSet dataSet = new DataSet();

                //下面这句加上就没有问题,否则出错
                OracleCommandBuilder mybuilder = new OracleCommandBuilder(adapter);
                adapter.Fill(dataSet, "test");
                dataSet.Tables[0].Rows[0]["N"] = 12345;
                adapter.Update(dataSet,"test");
                adapter.Dispose();

 

 

问题原因及解决:

====================================================

 

1.SelectCommand使用的select命令中必须包含主键(primary key)!

2.填充数据集时,使用如下方法:

da.FillSchema(ds,SchemaType.Source, "TableName");  //加载表架构 注意
da.Fill(dsPubs,"TableName");                                        //加载表数据

3. DataAdapter 的 MissingSchemaAction 属性设置为 AddWithKey

4.构造CommandBuilder对象时,将DataAdapter对象作为构造函数参数传入:

   SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(da);

5.增加行,修改行,删除行;

6.调用DataAdapter的update方法更新数据源!

7.更新数据源成功,调用ds的Acceptchanges()方法,更新数据集!


DbDataAdapter调用 Update 方法时,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE)。当 DataAdapter 遇到对 DataRow 的更改时,它将使用 InsertCommand、UpdateCommand 或 DeleteCommand 来处理该更改。这样,您就可以通过在设计时指定命令语法并在可能时通过使用存储过程来尽量提高 ADO.NET 应用程序的性能。在调用 Update 之前,必须显式设置这些命令。如果调用了 Update 但不存在用于特定更新的相应命令(例如,不存在用于已删除行的 DeleteCommand),则将引发异常。
  但是如果 DataTable 映射到单个数据库表或从单个数据库表生成,则可以利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。为了自动生成命令,必须设置 SelectCommand 属性,这是最低的要求。SelectCommand 所检索的表架构确定自动生成的 INSERT、UPDATE 和 DELETE 语句的语法。如果在自动生成插入、更新或删除命令后修改 SelectCommand 的 CommandText,则可能会发生异常。如果已修改的 SelectCommand.CommandText 所包含的架构信息与自动生成插入、更新或删除命令时所使用的 SelectCommand.CommandText 不一致,则以后对 DataAdapter.Update 方法的调用可能会试图访问 SelectCommand 引用的当前表中已不存在的列,并且会引发异常。可以通过调用 CommandBuilder 的 RefreshSchema 方法来刷新 CommandBuilder 用来自动生成命令的架构信息。

  对于DbDataAdapter.Update 方法更新数据库,每次在调用DbDataAdapter.Update(ds) 之后一定要ds.acceptchanges,否则会对后面用到的ds出现意想不到的错误。

智能车竞赛独轮组信标灯系统全解析:从硬件选型到实战调试 本文全面解析了智能车竞赛独轮组信标灯系统的核心原理与实战应用。从硬件架构(灯板、灯罩、控制器)的深度剖析,到红外信号(特别是40kHz调制信号)的接收与解码策略,再到车模的灭灯机构设计与路径规划,提供了从硬件选型到软件调试的全链路指南。文章重点分享了实战调试技巧与常见问题排查方法,旨在帮助参赛队伍深入理解系统,提升车模的识别精度与比赛表现。 阅读详情

相关推荐

MOSFET导通电阻Rdson全解析:物理组成、公式推导与工程选型要点

在功率电子设计中,MOSFET作为核心开关器件,其导通电阻Rdson直接决定导通损耗与系统效率。从半导体物理角度看,Rdson并非单一固定值,而是由源极电阻、沟道电阻、累积层电阻、JFET区电阻、漂移区电阻及衬底电阻等多个分量串联而成,并随栅极驱动电压、结温以及击穿电压等级发生显著变化。理解Rdson的物理来源与数学表达,有助于工程师在低压大电流与高压小电流等不同场景中合理选型、优化驱动电压并准确估算热损耗。文章从沟道电阻公式出发,深入剖析耐压与导通电阻的物理矛盾、温度系数的影响规律,并给出数据手册参数的正

weixin_29163857的博客 195

使用DataSet更新数据库的两种方式

1:自动生成命令的条件 a)动态指定 SelectCommand 属性 b)利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。 c)为了返回构造 INSERT、UPDATE 和 DELETE 。SQL CommandBuilder 必须执行 SelectCommand。 即:...

weixin_30642869的博客 809

蜗牛星际+OpenWrt实战:双网口变AP模式,让所有设备同网段互通

本文详细介绍了如何将蜗牛星际双网口小主机刷入OpenWrt系统,并将其配置为AP模式,实现与主路由同网段的无缝桥接。通过关闭DHCP、桥接物理网口等核心步骤,解决家庭网络设备割裂问题,让所有设备在同一局域网内高效互通,特别适合追求网络简洁和厌恶多级NAT的技术爱好者。

zero1的博客 960

MySqlDataAdapter桥接器的使用

MySqlDataAdapter桥接器的使用

againknow的博客 2408

【破局之道】LangChain4j 0.31.0 + Java 8 + Spring Boot:在“过时”环境中构建本地大模型应用的实战指南

本文为使用Java 8和Spring Boot等“过时”技术栈的团队提供了构建本地大模型应用的实战指南。通过采用LangChain4j 0.31.0这一兼容版本,结合Ollama部署本地大模型,开发者无需升级JDK即可在现有项目中快速集成AI能力,实现智能问答、文档摘要等功能,为传统项目注入创新活力。

t4y5u6i7o的博客 557

基于 SquashFS 构建 Linux 可读写文件系统

嵌入式 Linux 启动过程 本文所描述的的 Linux Image 由 BootLoader、kernel、initrd、rootfs 组成,它们共同存在于一个可以启动的存储设备中(本文以 USB 为例)。组成架构如下: 图 1. 可启动 linux 镜像文件结构 各个模块的作用如下: Boot Loader:由 BIOS 加载,用于将后续的 Kernel 和 initrd 的装载到内存中 kernel:为 initrd 运行提供基础的运行环境 initrd:检测并加载各种驱动程序 ro

wzq2009的专栏 1174

MySqlDataAdapter.Update()时出现异常:当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand

参考文档 异常出现的原因 MySqlDataAdapter没有设置UpdateCommand。 异常的解决 需要注意两点: 生成MySqlDataAdapter的查询语句必须返回主键或unique列 设置MySqlDataAdapter的查询指令后,不会自动生成相应的更新、添加和删除指令,可以通过使用MySqlCommandBuilder自动生成相应的其他指令: MySqlCommandBuilder commandBuilder = new MySqlCommandBuilder(Adapter);

loveangel1的博客 1021

VMware ESXi +DELL虚拟化存储磁盘容量处于紧急状态问题的处理

1、环境介绍 exsi server两台(DELL R730 ): 192.168.3.206 VMware EXSi6.5 192.168.3.207 VMware EXSi6.5 磁盘存储柜一台(DELL SC2000): 192.168.3.208 2、故障处理 由于前期规划的卷空间过大,虚拟机文件逐年增大以后,造成卷的磁盘占用过与整个磁盘空间的容量,虚拟化平台可用容量爆掉,DELL SC2000自动切换到紧急状态,禁止所有磁盘I/O,exsi主机上的虚拟机无法开机 首先,安装

wolf1105的博客 3531

dataset 更新到数据库的问题

string everyConn = Common.CommonUtility.GetEveryConn ();//   EmpResource mpEvery = new EmpResource(everyConn);//   DataSet dsE= mpEvery.mpResourceList ();//   DataTable dtE=dsE.Tables[0];   DataSet ds

记录成长的每一步 1499

8.9华为OD机试真题 新系统 - 查找最佳充电策略 (Java/Py/C/C++/Js/Go)

8.9华为OD机试真题 新系统 - 查找最佳充电策略 (Java/Py/C/C++/Js/Go)

算法大师! 1165

【以太网硬件十二】以太网端口自协商过程解密之二

简述以太网端口自协商的过程

highman110的博客 2488

在VS2017中,当DataSet发生更新时,解决了DataSetReportViewer中数据源无法更新问题,即:在DataSet修改后的列无法显示

在VS2017中,当DataSet发生更新时,解决了DataSetReportViewer中数据源无法更新问题,即:在DataSet修改后的列无法显示 #** 在dateSet里面添加新列 ** 在.rdlc后缀文件里打开报表设计器 点击报表数据 右击数据源下的DataSet1,后选择“刷新数据” 在报表设计器里就可以发现添加的列了 ...

shenjinwa的博客 491

万字长文,YOLOv8 yaml 文件解析 | 一文搞定 YOLOv8 分类任务,检测任务,分割任务,关键点任务

YOLOv8 yaml 文件解析 | 一文搞定 YOLOv8 分类任务,检测任务,分割任务,关键点任务

Coding... 1万+

通过强类型DataSet更新数据的问题。

请先看下面的代码( DataSet1为一强类型DataSet. ) DataSet1 ds1 = new DataSet1(); SqlConnection conn = new SqlConnection();conn.ConnectionString = @".....";conn.Open(); SqlCommand comm = new Sq...

weixin_33816611的博客 81

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题

WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题 原文:WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题WPF窗体中建有一个DataGrid,运行后修改各行数据,通过Update方法更新后台数据库。发现在数据库中,其中一列FAcctID(文本型)每次都会变为0,还有一列FDebit(货币型)不能更新,其他列则...

weixin_30384031的博客 152

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

关于利用DataSet更新数据库数据的问题

1、原理:利用DataRowState的状态来判定增删改 2、往DataTable表中加入行数据时有Add和Import()方式,其中Add()新增新行,Import()在别的表已存在的行 3、两张一样的表,想统一到一张表中进行更新数据,不能单纯的使用Import(),因为不知道Import的DataRow的DataRowState,可以利用先AcceptChanges(),然后判断该行具体的状态,利用SetModified()、SetAdded()、Delete(),设置DataRowState。 .

风若寒 1402

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

.Net中通过DataSet直接更新数据库相关问题和解决方法

一般存在的问题:1. 没有acceptchange2. 数据库中表没有设置主键解决方法:使用DataAdapter的update方法更新数据,该数据表必须设置主键,那是因为这个方法的实现原理实际上只不过是根据表结构和主键自动生成SQL也许你的数据表本身是有主键的,但是为什么还有问题?DataTable也必须要有主键,有两种方式解决:1)在读数据的时候DataAdapter.Fi

盛政(kisssy)的专栏 5921

请问:Vb.net的DATASET访问MS SQL Server时为何不能更新数据源?

请问:Vb.net的DATASET访问MS SQL Server时为何不能更新数据源?        我是个VB.net新手,发现使用DATASET时,按照MSDN提供的说法,发现根本不能将Dataset的更新、删除、添加记录传送到数据源,每次重新打开MS SQL Server的表时又发现原来的记录在里面。使用DATASET1.ACCEPTCHANGES和DataAdapter的Update方法提

hnzzltj的专栏 1362

解决修改VS中DataSet数据集更新保存后新增一个Dataset1.Designer.cs的问题

解决修改VS中DataSet数据集更新保存后新增一个Dataset1.Designer.cs的问题

freesheep720对world说ByeBye 82

WPF dataGrid绑定dataSet中的dataTable.出现.某个 ItemsControl 与它的项源不一致

某个ItemsControl与它的项源不一致

m0_63630266的博客 1095

关于使用dataAdapter.acceptChanges( )方法更新dataSet和数据库的问题

在winForm中实现这种效果 :         在dataGridView中任意修改数据,然后点击保存修改的按钮,将这些修改全部都一次性写入数据库。而且保存的过程中不用重新绑定dataGridView的数据源。dataGridView不用刷新。   ///          /// 将dataGridView中发生的改动提交到数据库,使用这种方法不用刷新dataGrid

tatagg的专栏 2555

WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题(转)

WPF窗体中建有一个DataGrid,运行后修改各行数据,通过Update方法更新后台数据库。发现在数据库中,其中一列FAcctID(文本型)每次都会变为0,还有一列FDebit(货币型)不能更新,其他列则没有问题。主要代码如下: OleDbCommand cmdUpdateAcct = new OleDbCommand(); cmdUpdateAcct.Connection = conA...

weixin_30567471的博客 70
上一篇: 详细分析C#数据库连接池
下一篇: 如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据
Devillyd
博客等级 码龄23年 58粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值