这是TABLE1的架构:
CREATE TABLE [dbo].[TABLE1]
(
[id] [int] IDENTITY(1, 1) NOT NULL,
[code] [int] NOT NULL,
[description] [varchar](256) NOT NULL,
[value] [numeric](18,2) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
这是我的SqlBulkCopy代码:
DataTable data = new DataTable();
data.Columns.Add("code", typeof(int));
data.Columns.Add("description", typeof(string));
data.Columns.Add("value", typeof(decimal));
foreach (Item item in items)
{
data.Rows.Add(item.Code, item.Description, item.Value);
}
SqlConnection sqlConn = new SqlConnection(_connstr);
sqlConn.Open();
SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.TableLock, sqlConn.BeginTransaction());
bulkCopy.DestinationTableName = "TABLE1";
bulkCopy.ColumnMappings.Clear();
foreach (DataColumn col in dt.Columns)
{
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(col.ColumnName, col.ColumnName));
}
bulkCopy.WriteToServer(dt);
sqlConn.Close();
Run Code Online (Sandbox Code Playgroud)
通过它进行调试时,一切看起来都不错,但在调用WriteToServer函数后,没有数据添加到数据库中.我已经尝试不重置列映射,但由于IDENTITY列而导致错误.不确定还有什么可能是错的.
看起来你永远不会提交交易.您需要存储对您启动的事务的引用,并提交它:
var transaction = sqlConn.BeginTransaction();
SqlBulkCopy bulkCopy = new SqlBulkCopy(
sqlConn,
SqlBulkCopyOptions.TableLock,
transaction
);
Run Code Online (Sandbox Code Playgroud)
然后
transaction.Commit();
Run Code Online (Sandbox Code Playgroud)
在调用执行批量复制之后和关闭连接之前.
| 归档时间: |
|
| 查看次数: |
2135 次 |
| 最近记录: |