2016-09-16 30 views
0

我在目标数据库中创建表后收到以下错误。在sqlBulkCopy.WriteToServer(dtCeTask)上获取错误;给出ColumnMapping不匹配

错误:给定的ColumnMapping与源或目标中的任何列不匹配。

using (SqlCeConnection conn = new SqlCeConnection(_connectionString)) 
      { 
       try 
       { 
        conn.Open(); 

        //CETASK 
        DataTable dtCeTask = new DataTable("TempTask"); 
        StringBuilder sqlTask = new StringBuilder(); 

        sqlTask.Append("select StartDate,Status,Priority,Complete, PercentComplete,TimerDuration, ItemLastModified, MatterIdentifier, MatterName, TimeEntryIdentifier, Isrecurring, Originator, createdDate, DisplayName, DisplayText "); 
        sqlTask.Append("from TaskOutlookItemProxy "); 

        using (SqlCeDataAdapter daCeTask = new SqlCeDataAdapter(sqlTask.ToString(), conn)) 
        { daCeTask.Fill(dtCeTask); } 

        using (SqlConnection sqlconnection = new SqlConnection(strConnString)) 
        { 
         sqlconnection.Open(); 

         // create table if not exists 
         string createTableQuery = @"Create Table TempTask1 
         (StartDate datetime, Status nvarchar(255), Priority nvarchar(255), Complete bit, PercentComplete int, TimerDuration int,ItemLastModified DateTime, MatterIdentifier nvarchar(255),MatterName nvarchar(255), TimeEntryIdentifier nvarchar(255), Isrecurring bit, Originator nvarchar(255), createdDate DateTime, DisplayName nvarchar(255), DisplayText nvarchar(255))"; 
         SqlCommand command = new SqlCommand(createTableQuery, sqlconnection); 
         command.ExecuteNonQuery(); 



         // Copy the DataTable to SQL Server Table using SqlBulkCopy 
         using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlconnection)) 
         { 
          sqlBulkCopy.DestinationTableName = dtCeTask.TableName; 

          foreach (var column in dtCeTask.Columns) 
          { 
           sqlBulkCopy.ColumnMappings.Add(column.ToString(), column.ToString()); 
          } 


          sqlBulkCopy.WriteToServer(dtCeTask); 
         } 
        } 

       } 
       catch (Exception ex) 
       { 
        throw (ex); 
       } 
      } 

回答

0

ColumnMappings是大小写敏感的 - 这已引起我之前(blog),我怀疑是你的情况。

在您的原始查询中,大多数列都位于CamelCase .... except createdDate(小写“c”)之外。所以,也许,如果你的db表定义的列名为“CreatedDate”,那么查询将正常运行,但是如果使用错误列名的列名,你的SqlBulkCopy将失败

相关问题