sqlbukcopy

sqlbukcopy 求助
异常内容: 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);
                } 


--------------------------------------
这是我的表结构:
sqlbukcopy

我尝试把构造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 的值都填充进去。再进行插入, 就没问题