2016-03-15 130 views
-1

我正在C#中编写一个函数来创建多个Datatables并将它们插入到数据集中,然后使用SQLBulkCopy将每个Datatable插入到Sql Server数据库中。我收到此错误消息: Syste.InvalidOperationsExceptionSQL Server批量插入转换失败

异常发生在列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"); 

我没有看到任何转换。调试器击中SQLBulkCopy的“WriteToServer”方法。

//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); 
+0

我见0,不是“0”int Rows.Add方法。你在哪里看到一个字符串?我错过了什么? – dachizzle37

+0

你没有分配'SqlBulkCopy.ColumnMappings'。如果您不这样做,SQL Server会假定您将按表格顺序提供表中的所有列。它将*不*自动根据名称映射列。首先将所有使用的列添加到列映射中。 –

回答

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"); 
+0

邑,我编辑了我的答案。 –

+0

Khairul ...我知道你是一个男人,但我只想说 - 我爱你的男人!你让我的一天真的很棒。谢谢! – dachizzle37

+0

不客气,祝您好运! –