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


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

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

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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106301 积分:540640 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/5 11:22:00 [只看该作者]

一直都这样的好不!http://www.foxtable.com/webhelp/topics/0419.htm

例如:

With DataTables("订单")
    
.DataRows.AddNew() '增加一行
    .DataRows.AddNew(3) '增加 三行
    
.DataRows.Delete(0'删除第一行
    
.DataRows.Clear() '清除所有行
End With

Clear方法会直接从后台清除所有行,并即刻生效,且不能撤销,所以一定要慎重使用。


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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106301 积分:540640 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/5 11:40:00 [只看该作者]

我测试没有问题哦

清空已经加载到本地的行的方法就是:DataTable("xx").DeleteFor("")


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


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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106301 积分:540640 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/5 12:02:00 [只看该作者]

测试还是没有问题,access和SqlServer的web数据源都测试过了


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


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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/12/5 12:18:00 [只看该作者]

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

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

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106301 积分:540640 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/12/5 13:37:00 [只看该作者]

确实是这样,问题已反馈!

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


加好友 发短信
等级:六尾狐 帖子:1265 积分:7838 威望: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编辑过]

 回到顶部
总数 21 1 2 3 下一页