Foxtable(狐表)用户栏目专家坐堂 → [20191208已修复]20191206的web数据源一个致命灾难性的bug!DataTable("xx").DataRows.Clear 居然等于 DataTable("xx").SQLDeleteFor(""),删表跑路了


  共有5468人关注过本帖树形打印复制链接

主题:[20191208已修复]20191206的web数据源一个致命灾难性的bug!DataTable("xx").DataRows.Clear 居然等于 DataTable("xx").SQLDeleteFor(""),删表跑路了

帅哥哟,离线,有人找我吗?
chen37280600
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
[20191208已修复]20191206的web数据源一个致命灾难性的bug!DataTable("xx").DataRows.Clear 居然等于 DataTable("xx").SQLDeleteFor(""),删表跑路了  发帖心情 Post By:2019/12/5 11:07:00 [显示全部帖子]

在web数据源下,DataTable("xx").DataRows.Clear 居然是清空数据库里该表的所有数据,而不是加载到本地的!

也就是
DataTable("xx").DataRows.Clear  = DataTable("xx").SQLDeleteFor("")

实在是太可怕了!彻底清空数据,不可挽回的灾难。这个清空用户数据的bug,简直比内存泄露和报错退出还要严重!


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看


备注:在直连数据源的情况下,是没有这个问题的

图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看

我的数据库是SQL2008,服务器是win2016,web数据源是http,https也试过,一样出问题



[此贴子已经被作者于2019/12/7 14:32:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/12/5 11:24:00 [显示全部帖子]

不是这样的,你看2个数据源的对比,完全一样的代码


DataRow都是存在本地内存里的行,没加载到本地的,就不在Clear范畴里

图片点击可在新窗口打开查看此主题相关图片如下:4.png
图片点击可在新窗口打开查看

Clear只是等于 删除本地的行+保存功能,并不应该能删掉数据库里的数据

而且按照你的说法,就缺了一个 清空已经加载到本地的行的方法了

[此贴子已经被作者于2019/12/5 11:30:47编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/12/5 11:34:00 [显示全部帖子]

在官方的一贯的思路了,对外部数据库进行直接操作的,一定会有特别的符号申明,例如SQLxxx,或者是FromSever =True

DataTable都是指已经加载到本地内存的数据,Table是指要展示的部分或全部内存数据。

外部数据源→DataTable内存→Table显示器
3层数据结构很清晰,不应该存在有内存偷偷操作外部数据源的混淆理念
[此贴子已经被作者于2019/12/5 11:34:55编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/12/5 11:45:00 [显示全部帖子]

你删除前,本地有12行数据,你外部数据库自然也有12行数据。

你删除本地12行,保存后自动触发删除外部数据源12行,当然没问题

正确方法:
1保证使用web数据源
2确保外部数据源里有数据
3把本地DataTable的loadfilter="1=2",也就是清空加载,让本地DataTable一条数据都没有
4执行DataTable.Clear

5最后,你看下你的外部数据源里,是不是所有数据都没了

简单说:本地没有任何数据下,执行Clear,也会把外部数据源里的数据全部删掉
[此贴子已经被作者于2019/12/5 11:48:34编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/12/5 12:18:00 [显示全部帖子]

好。你就用这段代码,对直连的数据源试试,保证第三阶段最后结果不是0

在直连数据库下,clear不会清除外部数据源的!
[此贴子已经被作者于2019/12/5 12:19:15编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/12/5 14:42:00 [显示全部帖子]

1206还是有这个问题,就是Clear方法,官方是想要删除还是不删除外部数据源的东西?

估计现在没多少人在用web数据库,都是直连,过去的项目里,clear一贯思路都是不删外部数据源
突然把它修正为会清空外部数据源,很多人不知道的话,直接到生产环境,发现问题的时候,已经是数据全空,绝对是个会炸的事情
[此贴子已经被作者于2019/12/5 14:52:30编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/12/5 15:23:00 [显示全部帖子]

既然Datarows是指已加载到本地的行的集合,那DataRows.clear按照理解,应该是对这个集合进行操作,而不是删除外部数据源里的东西

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/12/6 11:32:00 [显示全部帖子]

希望官方先出来站个队,Clear方法的设计理念是想清外部数据源还是不清的?我先改好目前已经有的项目

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1279 积分:7953 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/12/7 14:32:00 [显示全部帖子]

20191208版本已经修复这个bug,大家请及时升级

 回到顶部