以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  异步里可以用DataTables("xxx").SqlFind 和其他Sqlxxx方法吗?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=149567)

--  作者:chen37280600
--  发布时间:2020/5/6 14:32:00
--  异步里可以用DataTables("xxx").SqlFind 和其他Sqlxxx方法吗?
异步里对主线程的变量进行修改,肯定会出现重复脏写

但是在异步里,利用主线程的DataTables("xx").sqlFind出来的datarow,能利用吗?会不会多个线程里都在SQLfind,把A线程找到的行,返回给了B线程?

--  作者:有点蓝
--  发布时间:2020/5/6 14:38:00
--  
首先sqlFind出来的是一个独立的datarow,不依赖任何已加载的表。也不属于公共变量,是私有变量
其次,线程的程序域都是独立的。

--  作者:有点蓝
--  发布时间:2020/5/6 14:41:00
--  
但是DataTables("xx")这种就属于公共变量,所以个人认为还是建议使用sql,或者是sql返回的DataTable
--  作者:chen37280600
--  发布时间:2020/5/7 12:02:00
--  
我想这个问题,可能要有狐爸来回答。
其实这个找数据是否线程安全,就是这个SqlFind里面,有没有用到其他全局的东西,封装这个源码的人才知道

例如查找前,还有个全局用的BuildFilterSql,专门用于把条件+sql语句组合,
那我不同线程里,要分别查找数据时,就可能A线程创造的查询SQL,刚才被B线程创造的查询SQL覆盖,然后A才去查询,就出现所谓的线程不安全,找回来的数据张冠李戴

类似于java8之前的日期格式化功能,线程不安全https://www.cnblogs.com/xkzhangsanx/p/12037915.html

为啥我会这样问,因为我发现dim dr as datarow = Datattables("xx").sqlfind,然后直接判断dr是否为nothing,太方便了
比辛苦弄一个sqlCommand,然后读取回来放dt,最后再判断dt.datasrows =1,省太多代码了



--  作者:chen37280600
--  发布时间:2020/5/7 14:38:00
--  
想狐爸帮忙解答一下,谢谢
--  作者:chen37280600
--  发布时间:2020/5/8 14:44:00
--  
来,我自己顶一下,希望狐爸帮忙回答一下
--  作者:浙江仔
--  发布时间:2020/5/9 8:27:00
--  
涉及深层次的真的是不懂了,都是靠了狐表在开发上走了几步
也因为“杰”的帖子,更加开阔了眼界和思路

To狐爸:
确实是SQLxxx太方便了,如果异步不完美支持,确实增加了开发的工作量
如果能改进,最好SQLAddNew也能改造一下支持异步

--  作者:浙江仔
--  发布时间:2020/5/12 8:20:00
--  
顶上
--  作者:Hopenight
--  发布时间:2020/5/15 9:55:00
--  
帮忙杰顶一下
--  作者:chen37280600
--  发布时间:2021/2/23 17:33:00
--  
异步里调用DataTables("xx").SqlFInd是报错的,结论是,不能用

为什么有时候异步里DataTables("xx").SqlFInd并没有报错呢?那是因为几次异步函数,没同时发生。实测,