SQL Server批量插入转换失败

时间:2016-03-15 18:24:37

标签: c# sql-server

我在C#中编写一个函数来创建几个Datatables并将它们插入到Dataset中,然后使用SQLBulkCopy将每个Datatable插入到Sql Server数据库中。我收到此错误消息: Syste.InvalidOperationsException

异常发生在isBuget列,这有点。给定的值是String类型?我清楚地看到我正在添加的行中的0。     //创建铰刀表

        DataTable dtreamer = new DataTable();
        dtreamer.Columns.Add("quoteID");
        dtreamer.Columns.Add("line");
        dtreamer.Columns.Add("customer");
        dtreamer.Columns.Add("salesman");
        dtreamer.Columns.Add("quoteDesc");
        dtreamer.Columns.Add("machineModel");
        dtreamer.Columns.Add("machineDesc");
        dtreamer.Columns.Add("isBudgetary");
        dtreamer.Columns.Add("quoteDate");
        dtreamer.Columns.Add("notes");
        dtreamer.Columns.Add("userName");

        dtreamer.Rows.Add(2016099, "Raise bore", "c", "sales", "desc",                                      
        "machineModel", "machineDesc", 0, "01/01/2000", "notes","userName");

我没有看到任何转化。调试器命中" WriteToServer" SQLBulkCopy的方法。

   //create data set to hold tables
        DataSet set = new DataSet();
        set.Tables.Add(dtreamer);

        set.Tables.Add(dtlineitems);

        set.Tables.Add(dtcountries);

        set.Tables.Add(dtdiameters);

        try
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlBulkCopy copy = new SqlBulkCopy(conn))
                {
                    conn.Open();

                            copy.DestinationTableName = "Reamers";

                            copy.WriteToServer(dtreamer);

1 个答案:

答案 0 :(得分:2)

虽然您使用的是SqlBulkCopy,但您应该为每个DataTable列指定列类型,例如 -

    DataTable dtreamer = new DataTable();
    dtreamer.Columns.Add("quoteID", typeof(int));
    dtreamer.Columns.Add("line", typeof(string));
    dtreamer.Columns.Add("customer", typeof(string));
    dtreamer.Columns.Add("salesman", typeof(string));
    dtreamer.Columns.Add("quoteDesc", typeof(string));
    dtreamer.Columns.Add("machineModel", typeof(string));
    dtreamer.Columns.Add("machineDesc", typeof(string));
    dtreamer.Columns.Add("isBudgetary", typeof(bool));
    dtreamer.Columns.Add("quoteDate", typeof(DateTime));
    dtreamer.Columns.Add("notes", typeof(string));
    dtreamer.Columns.Add("userName", typeof(string));

然后尝试添加行 -

dtreamer.Rows.Add(2016099, "Raise bore", "c", "sales", "desc",                                      
"machineModel", "machineDesc", 0, "01/01/2000", "notes","userName");