以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]反馈一个严重的存储过程发现的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=123843)

--  作者:ericsky
--  发布时间:2018/8/24 12:04:00
--  [求助]反馈一个严重的存储过程发现的问题
问题是:新增行执行保存代码后,不会在后台数据库生成新的数据行,而是覆盖旧有的数据行,造成数据丢失。
1、用的是sql数据源,发生问题时网络状况不良。
2、用的狐表的保存代码:
dim r as row = tabels(“XXX“).addnew
....
r.save

3、发生问题的数据表中已经执行了近8000笔的数据操作,这是第一次发现这种情况,连续两笔操作,分别覆盖到[Identify]为1 和 3 的原数据行。
---------

数据安全是排在首位的,请官方分析狐表的存储过程,看看问题是怎么发生,要不然写出来的软件用的提心吊胆的。

@狐狸爸爸


--  作者:有点蓝
--  发布时间:2018/8/24 12:18:00
--  
狐表没有使用存储过程,是逐条保存的。

相关操作的完整代码,或者实例请发上来测试。

--  作者:ericsky
--  发布时间:2018/8/24 12:31:00
--  
具体情况就是我1楼所说的,当时的情形已过去了,不可复制。我也没办法拿出实例给你。
请你们分析在各种极端网络情况下,有没有可能出现我所说的情况!
这很重要,望重视!!

--  作者:有点蓝
--  发布时间:2018/8/24 13:42:00
--  
恩,我们测试一下,看能不能出现这种问题
--  作者:xxfoxtable
--  发布时间:2018/8/24 13:54:00
--  
先删除,再更新,再保存,这样的语句也出问题,会经常自动增加很多记录,没找到规律
Dim tran As System.Data.SqlClient.SqlTransaction
try
    Dim conn As new System.Data.SqlClient.SqlConnection("server=voyo;uid=sa;pwd=hailun.;database=Test")
    conn.Open() \'打开链接
    tran = conn.BeginTransaction()
    Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping("第一列", "第一列")
    Dim mapping2 As new System.Data.SqlClient.SqlBulkCopyColumnMapping("第二列", "第二列")
    Dim copy As new System.Data.SqlClient.SqlBulkCopy(conn, System.Data.SqlClient.SqlBulkCopyOptions.Default, tran)
    Copy.ColumnMappings.Add(mapping1)
    Copy.ColumnMappings.Add(mapping2)
    copy.DestinationTableName = "表D" \'指定服务器上目标表的名称
    copy.WriteToServer(DataTables("表D").basetable)   \'你的datatable名字,执行把DataTable中的数据写入DB
    tran.Commit()                                  \'提交事务
    msgbox("OK")
catch ex As exception
    msgbox(ex.message)
    tran.Rollback()    \'返回False 执行失败!
End try
--  作者:有点蓝
--  发布时间:2018/8/24 14:36:00
--  
以下是引用xxfoxtable在2018/8/24 13:54:00的发言:
先删除,再更新,再保存,这样的语句也出问题,会经常自动增加很多记录,没找到规律
Dim tran As System.Data.SqlClient.SqlTransaction
try
    Dim conn As new System.Data.SqlClient.SqlConnection("server=voyo;uid=sa;pwd=hailun.;database=Test")
    conn.Open() \'打开链接
    tran = conn.BeginTransaction()
……

肯定和这个用法没有关系,是你自己处理逻辑出错