Dataset已清除了,为什么还有数据

mtcbhsw 2018-06-19 09:02:21
代码如下:
DataSet ds = new DataSet();
string sql = "select name,mobi,intro from tbuser";
SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
sda.Fill(ds, "tbuser");
outValue(ds.Tables[0]);
conn.Close();
ds.Clear();
sda.Fill(ds, 0, 2, "tbuser");
Console.WriteLine("\n更新后的数据表:");
outValue(ds.Tables[0]);
问题:
1、conn.Close();为什么sda.Fill(ds, 0, 2, "tbuser")还能起作用
2、假设conn.Close()后,sda操作的是本地数据,那问题是我已ds.Clear(),那本地也没数据了,为什么sda.Fill(ds, 0, 2, "tbuser");还是取得了两条记录。
...全文
737 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mtcbhsw 2018-06-23
  • 打赏
  • 举报
回复
那我为什么说不知道真正的答案呢: 因为那段代码是用于分页显示的,按现原结论是:每次显示下一页,都是从数据库中重新下载数据,这个要实时数据的是很好, 但是,如果想不用每次点下一页都重新从服务器上下载数据,那怎么弄,其实我们的需求经常是这个才对吧。
mtcbhsw 2018-06-23
  • 打赏
  • 举报
回复
谢谢大家, 但我还是不知道真正的答案,经个人测试,我认为apollokk的是答案,以下我的测试: 1、sqlDataAdapter只是相当于Command,仅作为数据源(sql server数据表)与DataSet交换数据的命令,仅仅是一个命令,一个动作,他本身不存储任何数据,数据只存在于数据源和DataSet中---------这些书上都是这样说的。 2、我认为,数据也是不可能又存在sqlDataAdapter中,又存在DataSet中,这不合常理啊,双份了啊,下面这段代码是可以正常执行的: sda.Fill(ds, 1, 2, "tbuser"); sda.Dispose();//往下都没有sda了 Console.WriteLine("\n更新后的数据表:"); outValue(ds.Tables[0]);//这个是可以输出正确数据的 所以我认为也证明了数据是存在DataSet中, 3、 ds.Clear();确实清空了数据,conn.close也确实是关闭了连接,那sda.Fill(ds, 1, 2, "tbuser");为什么还能执行呢?照“apollokk”说的,sda会重新连接数据源取得数据。下面测试证明了这段话是对的: 在完成第一次取数并清除后,暂停程序运行,关闭Sql Server数据库,按任意键继续执行,sda.Fill(ds, 1, 2, "tbuser");失败,说明他自动连数据库。 真心谢谢每一个回答
圣殿骑士18 2018-06-22
  • 打赏
  • 举报
回复
你是ds.Clear(),又不是sda.Clear(),当然有数据了。
Hello World, 2018-06-21
  • 打赏
  • 举报
回复
SqlDataAdapter执行Fill时并不要求对应的Connection先打开,而是在执行的过程中自己会打开(如果没打开),执行完后恢复Connection到原来的状态,换句话说你反Connection关闭了再Fill一次时SqlDataAdapter会自己打开Connection
SoulRed 2018-06-20
  • 打赏
  • 举报
回复
你是要删除数据库的记录么?你当前的操作是删除了一个从数据库查询得到的临时结果数据集。
正怒月神 2018-06-20
  • 打赏
  • 举报
回复
额。。。 1 因为sqldataadapter已经拿到数据了。 2 ds.Clear(); sda.Fill(ds, 0, 2, "tbuser"); 你是先清空后填充,没毛病啊,有数据不是很正常嘛。还是问题1,数据在sqldataadapter里,又不在dataset里。dataset只是被填充数据的模型罢了。
本人QQ-554433626 2018-06-20
  • 打赏
  • 举报
回复
因为SqlDataAdapter 还有数据啊 执行sda.Dispose();后sda.Fill(ds, 0, 2, "tbuser");就报错了
mtcbhsw 2018-06-19
  • 打赏
  • 举报
回复
不是很明白, DataTable的DataRow清除了,不就没记录了
余许承 2018-06-19
  • 打赏
  • 举报
回复
DataSet的clear并不会清楚表数据只是清除了DataTable的DataRow,要想完全清楚 DataSet.DataTable.Clear();
深入探索了类、接口、属性和方法。讲解了数据结构,演示了如何用ado.net来解决具体的数据访问问题。重点讨论了ado.net如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问api(包括ole db,ado,odbc和jdbc)的程序员,提供了帮助其迁移到ado.net许多易用的参考 本书由资深数据库教师编写,全面介绍了ado.net。书中深入剖析了ado.net的本质,探索了类、接口、属性和方法的工作原理,同时还为其他数据访问api(包括oledb,ado,odbc和jdbc)的程序员,提供了有价值的参考材料。本书适合具有一定数据库基础的开发人员阅读,也可用作数据库中高级课程或培训班配套教材。 第1章 数据:模型、应用程序和api 1.1 信息、数据建模和数据库 1.2 数据库和api基础 1.3 关系模型 1.3.1 关系设计规则 1.3.2 关系模型的优点 1.3.3 ado.net对关系模型的支持 1.4 层次结构、对象和混合 1.4.1 现代的非关系数据 1.4.2 多维数据 1.4.3 非关系数据和ado.net 1.4.4 xml和信息集 1.4.5 xml、数据库和统一数据表示 1.5 以数据的中心的应用程序模型 1.6 数据访问api的发展历程 1.7 小结 第2章 ado.net基础 2.1 数据访问和.net体系结构 2.2 两种数据访问模式 .2.3 连接模式 2.3.1 oledb和sqlclient数据提供程序 2.3.2 使用ado.net数据提供程序编写泛型数据访问代码 2.3.3 数据提供程序模型中的游标 2.4 断开模式和dataset 2.5 .net中的xml api 2.5.1 流式xml 2.5.2 xml架构 2.5.3 xmldocument,xpath和xpathnavigator 2.5.4 xml和数据提供程序的混合 2.6 托管数据类的布局 2.7 小结 第3章 连接模型:流式数据访问 3.1 .net数据提供程序和连接模型 3.2 连接类 3.3 连接池 3.4 元数据方法 3.5 command类 3.6 使用参数 3.7 命令的准备、取消、超时和清除 3.8 通过datareader进行流式数据传输 3.9 通过idatarecord读取列值 3.10 错误处理 3.11 使用事务处理 3.11.1 分布式事务处理 3.11.2 连接池的工作原理 3.11.3 声明性事务处理的工作原理 3.12 permission类 3.13 小结 第4章 dataset类:关系数据的集合 4.1 dataset 4.1.1 dataset作为驻留内存的数据库 4.1.2 dataset的用途 4.2 dataset对象模型 4.2.1 datacolumn,datarow和data table 4.2.2 data table及其用法 4.2.3 datarow 4.2.4 键、关系和约束 4.2.5 通过关系来导航:select和find 4.2.6 行的添加、获取、更改和删除 4.2.7 合并更改 4.2.8 合并dataset 4.2.9 datarow的状态和版本 4.2.10 规则和关系 4.2.11 错误处理 4.2.12 事件 4.2.13 dataset和非关系类型 4.3 定义信息架构 4.4 小结 第5章 dataadapter:数据库和dataset的同步 5.1 乐观并发性 5.2 dataadapter类 5.3 从托管提供程序中填充dataset 5.3.1 在fill中使用架构和映射信息 5.3.2 执行dataadapter.fill期间的错误处理 5.4 dataadapter.fill的工作原理 5.5 oledbdataadapter中的ado集成 5.6 通过dataadapter更新数据库 5.6.1 commandbuilder类 5.6.2 直接编写更新逻辑 5.7 update的工作原理 5.8 dataset事件模型 5.9 编写常规自定义命令 5.9.1 adox commandbuilder 5.9.2 构造批处理更新命令 5.10 再论dataset和非关系数据类型 5.11 应该使用dataset还是datareader 5.12 小结 第6章 数据绑定:ado.net和gui 6.1 windows窗体和web窗体 6.2 数据表示模式 6.3 使用数据绑定控件 6.3.1 web窗体数据绑定类型 6.3.2 数据绑定控件类型解析 6.3.3 同datareader绑定 6.4 用dataset进行数据绑定 6.5 data view和通用转换 6.6 表和列映射 6.7 可编辑的列表控件:datalist和datagrid 6.7.1 datalist 6.7.2 datagrid 6.8 非关系数据和data view 6.9 与visual studio的集成 6.10 控件和数据窗体 6.1l 小结 第7章 xml和数据访问的集成 7.1 xml和传统数据访问 7.2 xml和ado.net 7.2.1 定义dataset的架构 7.2.2 优化dataset的xml架构 7.2.3 将xml读入dataset 7.2.4 从dataset写入xml架构 7.2.5 microsoft特有的批注 7.2.6 从dataset写入xml数据 7.3 序列化、封送和dataset 7.4 类型化的dataset 7.5 xmldatadocument类 7.5.1 xmldatadocument和dataset 7.5.2 xmldatadocument和datadocumentxpathnavigator 7.6 数据库和xml的重要意义 7.6.1 xml作为一种特定类型 7.6.2 文档合成与分解 7.7 sql server、xml和托管数据访问 7.7.1 for xml关键字 7.7.2 openxml 7.7.3 sqloledb提供程序 7.7.4 sqlxml托管类 7.7.5 sqlxml web应用程序 7.7.6 updategram 7.7.7 sql xml oledb提供程序中的for xml 7.7.8 批量加载 7.7.9 未来的支持 7.8 使用sqlxml和.net 7.9 小结 第8章 提供程序:ado.net和数据提供程序 8.1 如何选择 8.2 保留ole db:ole db概念总结 8.3 保留ole db:与oledb数据提供程序交互 8.3.1 主要的共型和类型映射 8.3.2 访问程序 8.3.3 执行命令、返回结果和使用openrowset 8.3.4 command的最终格式和行为 8.3.5 command dialect 8.3.6 层次化数据 8.3.7 从rowset更新 8.3.8 错误 8.3.9 不支持的功能 8.3.10 支持和不支持的提供程序 8.4 编写数据提供程序 8.5 实现connection类 8.5.1 规格 8.5.2 实现 8.5.3 特殊化 8.6 实现command类 8.6.1 规格 8.6.2 实现 8.6.3 特殊化 8.7 实现datareader类 8.7.1 规格 8.7.2 实现 8.7.3 特殊化 8.8 实现dataadapter类 8.8.1 规格 8.8.2 实现 8.8.3 特殊化 8.9 添加增强功能 8.10 实现xml infoset提供程序 8.11 实现xmlreader 8.12 实现xpathnavigator 8.13 其他实现方案:总结 8.14 论证大一统访问模型的可行性 8.15 小结 第9章 消费者的ado.net迁移路径 9.1 ado.net迁移路径 9.2 面向ole db程序员的ado.net 9.2.1 cotype等价物 9.2.2 数据提供程序的透明性 9.2.3 使用提供程序特有的功能 9.2.4 错误处理 9.2.5 系统提供的服务 9.2.6 系统提供的组件 9.2.7 服务提供程序 9.2.8 封送 9.3 ado概述 9.4 面向ado程序员的ado.net 9.5 ado connection、command和事务处理 9.5.1 连接和连接字符串 9.5.2 使用事务处理 9.5.3 命令和command行为 9.5.4 层次化数据 9.5.5 异步操作 9.5.6 属性 9.6 ado.net与ado断开模型的比较 9.6.1 类的等价物 9.6.2 导航 9.6.3 ado.net中的getrows有何变化 9.6.4 更新 9.6.5 创建更新语句 9.6.6 批处理更新 9.6.7 ado.net的dataset扩展 9.6.8 列和表的命名 9.6.9 排序和筛选 9.7 ado db的互操作性 9.8 面向odbc程序员的ado.net 9.8.1 句柄和环境 9.8.2 命令 9.8.3 获取数据 9.8.4 元数据和架构信息 9.8.5 错误 9.9 面向jdbc程序员的ado.net 9.9.1 泛化代码 9.9.2 提供程序的类型 9.9.3 连接池 9.9.4 非关系数据类型 9.9.5 对象数据库 9.9.6 其他sql-99扩展 9.9.7 元数据 9.9.8 事务处理 9.9.9 命令和行为 9.9.10 执行查询和返回结果 9.9.11 服务器游标 9.9.12 错误 9.10 ado.net jdbc程序员和断开模型 9.11 sql/j part 0和类型化dataset 9.12 小结 第10章 ado.net和各种数据类型 10.1 数据访问的发展历程 10.2 ado.net和基于服务器及文件的rdbms 10.3 ado.net和同种层次结构数据及ordbms 10.4 ado.net和网络数据:对象图、odbms与网络dbms 10.5 ado.net和结构化文件、多维数据及ordbms 10.6 ado.net平面文件和半结构化文件 10.7 小结 附录a 数据类型和类型映射 a.1 db type枚举 a.2 将sql server数据类型映射到sqltype及sqldbtype a.3 将ole db dbtype映射到.net数据类型 a.4 odbc类型映射 a.5 parameter.dbtype 附录b 表达式的语法 b.1 用户自定义值 b.2 运算符 b.3 字符串运算符 b.4 通配符 b.5 父/子关系引用 b.6 聚合 b.7 函数 附录c 架构推断规则 c.1 排除信息 c.2 推断过程总结 c.3 表 c.4 有属性的元素 c.5 有子元素的元素 c.6 重复元素 c.7 列 c.8 属性 c.9 没有属性或子元素的元素 c.10 关系 c.11 元素文本 c.12 限制

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧