sqlbukcopy
sqlbukcopy 求助
异常内容: System.FormatException: 该字符串未被识别为有效的 DateTime。
源码如下:
根据数据表构造的 table
sqlbulkcopy 批量入库
循环遍历:
--------------------------------------
这是我的表结构:

我尝试把构造table 的方法里那些 datetime类型改成 string, 然后循环的时候放入的值改成 datetime.now.tostring("yyyy-mm-dd hh:mm:ss")这种格式=> 2015-06-15 08:20:00.000
也是一样的异常, 求解救
------解决思路----------------------
SqlBulkCopy按照你给的列从上至下插入,但你少给了tid列,所以后面的列都偏移了。解决有几种方式,一种是你在datatable里提供tid列,一种把表的tid移到最后一列去,最后一种是你代码提供列的映射关系,比如bulkCopy.ColumnMappings.Add("status", "status");
------解决思路----------------------
你的 tid 的值没有给, 所以你的 status 值会放到 tid 上, type 的值会放到 status 上, 一次类推, 所以当 jdp_hashcode 的值放到 modified 中的时候会抛出时间格式转换异常。
解决方法:
看起来你的 tid 应该是自增项, 你可以首先获得最大 tid + 1 的值, 然后在你生成这个 DataTable 的时候讲每个 tid 的值都填充进去。再进行插入, 就没问题
异常内容: System.FormatException: 该字符串未被识别为有效的 DateTime。
源码如下:
根据数据表构造的 table
public static DataTable GetTableSchema()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] {
new DataColumn("status",typeof(string)),
new DataColumn("type",typeof(string)),
new DataColumn("seller_nick",typeof(string)),
new DataColumn("buyer_nick",typeof(string)),
new DataColumn("created",typeof(DateTime)),
new DataColumn("modified",typeof(DateTime)),
new DataColumn("jdp_hashcode",typeof(string)),
new DataColumn("jdp_response",typeof(string)),
new DataColumn("jdp_created",typeof(DateTime)),
new DataColumn("jdp_modified",typeof(DateTime))
});
return dt;
}
sqlbulkcopy 批量入库
public static void BulkToDB(DataTable dt)
{
SqlBulkCopy bulkCopy = new SqlBulkCopy(con);
bulkCopy.DestinationTableName = "testTable";
bulkCopy.BatchSize = dt.Rows.Count;
try
{
if (dt != null && dt.Rows.Count != 0)
bulkCopy.WriteToServer(dt);
}
catch (Exception)
{
throw;
}
}
循环遍历:
for (int i = 0; i < genNum; i++)
{
int Test_ProInfo_num = rnd.Next(1, Test_ProInfo_cacheDt.Rows.Count);
int Test_SellerInfo_num = rnd.Next(1, Test_SellerInfo_cacheDt.Rows.Count);
DataRow r = dt.NewRow();
r[0] = string.Format("WAIT_SELLER_SEND_GOODS");
r[1] = string.Format("fixed");
r[2] = string.Format(Test_SellerInfo_cacheDt.Rows[Test_SellerInfo_num]["seller_nick"].ToString());
r[3] = string.Format(RandomGenerationBuyerNick.GenName());
r[4] = DateTime.Now;
r[5] = DateTime.Now;
r[6] = string.Format("007");
r[7] = GenerationJson(RandomGenerationBuyerNick.GenName(),Test_ProInfo_cacheDt.Rows[Test_ProInfo_num]["outer_iid"].ToString(),Test_ProInfo_cacheDt.Rows[Test_ProInfo_num]["out_sku_id"].ToString(),Test_ProInfo_cacheDt.Rows[Test_ProInfo_num]["Title"].ToString(),Test_SellerInfo_cacheDt.Rows[Test_SellerInfo_num]["seller_nick"].ToString());
r[8] = DateTime.Now;
r[9] = DateTime.Now;
dt.Rows.Add(r);
}
--------------------------------------
这是我的表结构:
我尝试把构造table 的方法里那些 datetime类型改成 string, 然后循环的时候放入的值改成 datetime.now.tostring("yyyy-mm-dd hh:mm:ss")这种格式=> 2015-06-15 08:20:00.000
也是一样的异常, 求解救
------解决思路----------------------
SqlBulkCopy按照你给的列从上至下插入,但你少给了tid列,所以后面的列都偏移了。解决有几种方式,一种是你在datatable里提供tid列,一种把表的tid移到最后一列去,最后一种是你代码提供列的映射关系,比如bulkCopy.ColumnMappings.Add("status", "status");
------解决思路----------------------
你的 tid 的值没有给, 所以你的 status 值会放到 tid 上, type 的值会放到 status 上, 一次类推, 所以当 jdp_hashcode 的值放到 modified 中的时候会抛出时间格式转换异常。
解决方法:
看起来你的 tid 应该是自增项, 你可以首先获得最大 tid + 1 的值, 然后在你生成这个 DataTable 的时候讲每个 tid 的值都填充进去。再进行插入, 就没问题