以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 事务处理问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84350) |
-- 作者:凡夫俗子 -- 发布时间:2016/4/28 20:56:00 -- 事务处理问题 dim tran as SqlTransaction = null ‘声明一个事务对象 try dim conn as SqlConnection = new SqlConnection("server=.;uid=sa;pwd=sa;database=Test;")) conn.Open() \'打开链接 tran = conn.BeginTransaction() dim copy as SqlBulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tran)) copy.Destinati \'指定服务器上目标表的名称 copy.WriteToServer(MyDataTable) \'你的datatable名字,执行把DataTable中的数据写入DB tran.Commit() \'提交事务 catch (Exception ex) tran.Rollback() \'返回False 执行失败! end try 这段代码如何改成FT的事务处理了
|
-- 作者:大红袍 -- 发布时间:2016/4/28 23:47:00 -- 1、必须是sqlserver数据库
2、
Dim tran As System.Data.SqlClient.SqlTransaction [此贴子已经被作者于2016/4/28 23:47:17编辑过]
|
-- 作者:大红袍 -- 发布时间:2016/4/28 23:48:00 -- mark ODBC |
-- 作者:凡夫俗子 -- 发布时间:2016/4/29 0:11:00 -- 谢谢这么晚了还在工作 |
-- 作者:凡夫俗子 -- 发布时间:2016/4/29 0:17:00 -- 建议论坛开通打赏功能 |
-- 作者:blackzhu -- 发布时间:2016/4/29 8:47:00 -- 这个能加上条件吗? 是不是后台数据存在就更新,不存在就插入的? |
-- 作者:blackzhu -- 发布时间:2016/4/29 8:58:00 -- SqlBulkCopy 这个是不是用于插入? SqlDataAdapter 这个是用于更新?
|
-- 作者:Hyphen -- 发布时间:2016/4/29 9:09:00 -- 顾名思义,BulkCopy,就是批量复制的意思,只适合批量新增数据 设置一下BatchSize,性能会更上一层,BatchSize一般在500~1000之间,性能相对可靠一点 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.BatchSize = 1000 copy.WriteToServer(DataTables("表D").basetable) \'你的datatable名字,执行把DataTable中的数据写入DB tran.Commit() \'提交事务 msgbox("OK") catch ex As exception msgbox(ex.message) tran.Rollback() \'返回False 执行失败! End try |
-- 作者:大红袍 -- 发布时间:2016/4/29 9:15:00 -- 以下是引用blackzhu在2016/4/29 8:58:00的发言:
SqlBulkCopy 这个是不是用于插入? SqlDataAdapter 这个是用于更新?
大量数据的时候,用这个 SqlBulkCopy
少量数据的更新,可以用 SqlDataAdapter |
-- 作者:blackzhu -- 发布时间:2016/4/29 9:22:00 -- 我刚才测试了一下: Dim tran As System.Data.SqlClient.SqlTransaction try Dim conn As new System.Data.SqlClient.SqlConnection("****************************") 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.Destinati copy.WriteToServer(DataTables("用户登录").basetable) \'你的datatable名字,执行把DataTable中的数据写入DB tran.Commit() \'提交事务 msgbox("OK") catch ex As exception msgbox(ex.message) tran.Rollback() \'返回False 执行失败! End try 用户编号没有写入,只写入了姓名,像这个我如何来排除后台已经存在的用户编号以及姓名? 是不是只适合大量数据的导入后的写入?
[此贴子已经被作者于2016/4/29 9:23:37编辑过]
|