sqlbulkcopy问题

lsjlove 2011-12-19 11:16:31
今天早上做了实验用了用 SQLBulkCopy,代码如下:

using (SqlConnection conn = new SqlConnection(DbHelperSQL.GetConnectionString(ConnectionString.Scm)))
{
conn.Open();
using(SqlTransaction transaction=conn.BeginTransaction())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn,SqlBulkCopyOptions.Default, transaction))
{
try
{
bulkCopy.BatchSize = batchsize;
bulkCopy.BulkCopyTimeout = 600;
bulkCopy.ColumnMappings.Add("CardID", "CardID");
bulkCopy.ColumnMappings.Add("UserID", "UserID");
bulkCopy.ColumnMappings.Add("CardPassWord", "CardPassWord");
bulkCopy.ColumnMappings.Add("Note", "Note");
bulkCopy.ColumnMappings.Add("IsUse", "IsUse");
bulkCopy.ColumnMappings.Add("ActivitiesID", "ActivitiesID");
//bulkCopy.NotifyAfter = 2000;
//bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
bulkCopy.DestinationTableName = "dbo.card";
bulkCopy.WriteToServer(data);
transaction.Commit();

}
catch (Exception ex)
{
transaction.Rollback();
throw new Exception("导入数据错误");

}
}
}

}

}

数据库中表结构如下示:

[ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[UserID] [int] NOT NULL,
[FormCode] [bigint] NULL,
[CardID] [nvarchar](50) NOT NULL,
[CardPassWord] [nvarchar](50) NOT NULL,
[Note] [nvarchar](500) NULL,
[PostDate] [datetime] NULL,
[IsUse] [smallint] NULL,
[MobilePhone] [nvarchar](20) NULL,
[ActivitiesID] [int] NULL,
[ElesID] [int] NULL,
[SendTime] [datetime] NULL,

代码中我是从excel中读入的数据,所以临时添加了一个表格,代码如下:

DataTable data = new DataTable();
data.Columns.Add(new DataColumn("ID", typeof(int)));
data.Columns.Add(new DataColumn("UserID", typeof(int)));
data.Columns.Add(new DataColumn("CardID", typeof(string)));
data.Columns.Add(new DataColumn("CardPassWord", typeof(string)));
data.Columns.Add(new DataColumn("Note", typeof(string)));
data.Columns.Add(new DataColumn("IsUse", typeof(int)));
data.Columns.Add(new DataColumn("ActivitiesID", typeof(int)));


int nCardIndex = 0;
int nRowCounts = dt.Rows.Count;
for (var i = 0; i < nRowCounts; i++)
{
DataRow row = data.NewRow();
row["CardID"] = dt.Rows[i].Field<string>("CardID");
row["CardPassWord"] = dt.Rows[i].Field<string>("CardPassWord");
row["Note"] = this.Note;
row["IsUse"] = 0;
row["ActivitiesID"] = this.ActivityId;
row["UserID"] = 0;
data.Rows.Add(row);
}


我试着插入一条数据或者 20万条数据,去数据库查询的时候 ,的确是插进去了,但是 等执行完成的时候,数据库中插入的数据又没有了。难道自动回滚了?没有报错啊 。请大家给指点指点。
...全文
315 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsjlove 2011-12-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jiangfling 的回复:]

BeginTransaction()
对应的End呢?加上试试

try catch finally 最好这样用
[/Quote]我直插入一行的数据时 ,没有数据错误,源数据列 与目标数据表的列数没必要一一对应吧?^_^
lsjlove 2011-12-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jiangfling 的回复:]

BeginTransaction()
对应的End呢?加上试试

try catch finally 最好这样用
[/Quote]呵呵 在第二个 using块里呢
PaulyJiang 2011-12-19
  • 打赏
  • 举报
回复
BeginTransaction()
对应的End呢?加上试试

try catch finally 最好这样用
赳赳老陈 2011-12-19
  • 打赏
  • 举报
回复
可能是excel表格中有非法的数据吧,导致报错回滚了
建议对每一个字段进行合法性判断,把非法和无法转换的数据过滤掉
阿非 2011-12-19
  • 打赏
  • 举报
回复
transaction.Commit();
后面加句 输出到日志的话

应该是错误导致回滚了
lsjlove 2011-12-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sdfkfkd 的回复:]


transaction.Rollback();
加一个断点
可能是某些数据有问题,最终导致回滚了
看是哪些数据有问题,再做调整
[/Quote]
我加了 ,但代码根本就没就进入catch块里
特别 2011-12-19
  • 打赏
  • 举报
回复

transaction.Rollback();
加一个断点
可能是某些数据有问题,最终导致回滚了
看是哪些数据有问题,再做调整

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧