2012-10-31 2 views
0

엑셀 시트를 SQL Server 데이터베이스로 가져오고 있습니다. 시트를 가져 오기 전에 특정 항목을 확인해야합니다. 예를 들어, 알파벳으로 시작하는 값이 있어야하며 나머지 숫자가 숫자 여야 만하는 여권이라는 열이 있어야합니다.어떻게 SqlBulkCopy를 사용하면서 Excel 셀 값의 값을 비교할 수 있습니까?

DataTable dt7 = new DataTable(); 
      dt7.Load(dr); 
      DataRow[] ExcelRows = new DataRow[dt7.Rows.Count]; 
      // Bulk Copy to SQL Server 

      using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString)) 
      { 
       bulkCopy.DestinationTableName = "ExcelTable"; 
       dt7.Rows.CopyTo(ExcelRows, 0); 

       for (int i = 0; i < ExcelRows.Length; i++) 
       { 
        if (ExcelRows[i]["data"] == DBNull.Value) 
        { 
         // Include any actions to perform if there is no date 
         //ExcelRows[i]["data"] = Convert.ToString(0); 
        } 
        else 
        { 
         DateTime oldDate = Convert.ToDateTime(ExcelRows[i]["data"]).Date; 
         DateTime newDate = Convert.ToDateTime(oldDate).Date; 
         ExcelRows[i]["data"] = newDate.ToString("yyyy/MM/dd"); 
        } 



       } 
       bulkCopy.WriteToServer(ExcelRows); 
+0

위의 코드에서 여권 열은 어디에 있습니까? – andy

+0

그래서 BCP 전에 확인해야합니까? 쿼리/SP를 사용하여 DB에서 확인 할 수 있습니까? SQL Server 기본 제공 함수를 사용하여 상대적으로 간단해야하기 때문입니다. – OzrenTkalcecKrznaric

+0

@Anandkumar 그게 아니라면 내가 여권을 추가 할 것인가? 나는이 접근법을 보여주기 위해이 코드를 게시했다. – Arbaaz

답변

0

간단한 대답은 'NO'입니다. SqlBulk 작업을 수행하는 동안 유효성을 검사 할 수 없습니다. SqlBulk 작업을 수행하기 전에 Datatable의 유효성을 검사하면됩니다.

private bool Validate(Datatable dt) 
{ 
    //Perform your validation 
    // return true/false 
} 

     DataTable dt7 = new DataTable(); 
     dt7.Load(dr); 
     DataRow[] ExcelRows = new DataRow[dt7.Rows.Count]; 
     // Bulk Copy to SQL Server 

     // Perform your validation here. If not validated then skip with some message. 
     if(!Validate(dt7)) 
     { 
      //Show Message 
      return; 
     }    

     using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString)) 
     { 
      bulkCopy.DestinationTableName = "ExcelTable"; 
      dt7.Rows.CopyTo(ExcelRows, 0); 

      for (int i = 0; i < ExcelRows.Length; i++) 
      { 
       if (ExcelRows[i]["data"] == DBNull.Value) 
       { 
        // Include any actions to perform if there is no date 
        //ExcelRows[i]["data"] = Convert.ToString(0); 
       } 
       else 
       { 
        DateTime oldDate = Convert.ToDateTime(ExcelRows[i]["data"]).Date; 
        DateTime newDate = Convert.ToDateTime(oldDate).Date; 
        ExcelRows[i]["data"] = newDate.ToString("yyyy/MM/dd"); 
       } 



      } 
      bulkCopy.WriteToServer(ExcelRows); 
1

아니요. 당신이 할 수있는 일괄 작업 전에 검증을 수행하는 것입니다.

+0

정확히 내가하고 싶은 것이지만 질문은 어떻게 되는가? – Arbaaz

0

Excel 시트를 업로드하는 동안 Excel 셀 값의 유효성 검사를 수행하려고합니다. 두 가지 방법 :

  1. 은 데이터 테이블에서 Excel 데이터를 가져오고 그것을 검증 및 기록 불일치를 일을 통해 실행합니다. 검증을 마친 후에는 사용자에게 오류를 보여 주거나 더 이상 오류가없는 경우 sqlbulkcopy를 수행하십시오. 이 모든 것은 C# 수준에서 수행됩니다.

  2. SQL 앞에서 Excel 데이터를 데이터베이스의 임시 테이블에서 데이터 테이블 do sqlbulkcopy와 똑같이 가져옵니다. 그런 다음 대량 업로드 된 데이터의 유효성을 검사하고 오류를 전송하는 저장된 proc를 호출하십시오. 오류가 발생하면 사용자에게 경고하고, 그렇지 않으면 대량 복사를 수행하거나 저장된 proc을 호출하여 임시 테이블에서 실제 테이블로 데이터를 가져옵니다.

을 선택합니다.

관련 문제