2016-03-15 259 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

不客氣,祝您好運! –