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的事务处理了
1、必须是sqlserver数据库
2、
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
[此贴子已经被作者于2016/4/28 23:47:17编辑过]
这个能加上条件吗? 是不是后台数据存在就更新,不存在就插入的?
顾名思义,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
以下是引用blackzhu在2016/4/29 8:58:00的发言:SqlBulkCopy 这个是不是用于插入?
SqlDataAdapter 这个是用于更新?
大量数据的时候,用这个 SqlBulkCopy
少量数据的更新,可以用 SqlDataAdapter
我刚才测试了一下:
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编辑过]