2016-09-16 4 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) 전에 저를 간파하고 난 당신의 경우 의심.

원래 쿼리에서 대부분의 열은 createdDate (소문자 "c"제외)의 CamelCase ....입니다. 어쩌면 db 테이블 정의에 "CreatedDate"라는 열이있는 경우 쿼리가 제대로 실행되지만 SqlBulkCopy가 잘못 입력 된 열 이름을 사용하면 실패합니다

관련 문제