2012-02-15 3 views
2

DataTable에 10 개의 열이 있고 일부 행을 추가 한 후 SqlBulkCopy을 사용하여 데이터베이스에 추가하려고합니다.C# SqlBulkCopy types mismatch

내 문제는 DataTable에 문자열이 있고 데이터베이스의 일부 필드는 각각 십진수와 날짜입니다. 원하는 데이터 유형으로 변환 할 수있는 방법이 있습니까?

+0

데이터 테이블에 열을 어떻게 추가합니까? – Arion

답변

3

프로그래밍 방식의 DataTable에 열을 추가, 당신은 유형을 지정할 수 있습니다 : -

DataTable dt = new DataTable(); 
dt.Columns.Add("FieldName", typeof(System.Decimal)); 

당신이 대량 복사를 수행 할 때이이 영광 될 것입니다

.

사용자 의견에 대한 응답으로 편집

.

DataRow에 정보를 채우는 경우 소스 데이터가 대상 필드와 일치하지 않을 경우 명시적인 변환은 에만 필요합니다.

유형이 동일한 경우 그냥 할당 할 수 있습니다.

// With a decimal field, decimal target 
Decimal myNum = 123; 
// Works fine - assuming the Price datacolumn has been set up as a System.Decimal 
row["Price"] = myNum; 
+0

좋아, 그럼 행을 추가하면 어떻게 생겼을 까? 문자열에 필요한 모든 정보를 가지고 있으므로 추가하기 전에 변환해야한다고 가정합니다. 예를 들면 다음과 같습니다. DataRow row = dataTable.NewRow(); 행 [ "Price"] = Convert.ToDecimal (blanketInfo [4]); dataTable.Rows.Add (row); 내가 가지고있는 모든 데이터에 대해 그렇게해야 할 것입니까? 아니면 다른 방법이 있습니까? – Rocshy

+0

blanketInfo [4] 유형에 따라 다릅니다. 유형이 대상 필드 유형을 반영하지 않으면 변환해야합니다. 그러나 이미 십진수이면 그냥 할당 할 수 있습니다. –

0

코드에서 DataTable의 열을 만드는 것처럼 들릴 수 있습니다 (열 데이터 형식을 적절하게 설정하는 DataAdapter를 통해 채우기와 반대).

그럴 경우 모든 문자열 대신 올바른 데이터 형식으로 DataColumns를 만든 다음 행을 추가 할 때 데이터를 적절한 문자열로 변환 할 수 있습니다. 유형?

즉 DataTable에 올바른 유형과 데이터가있는 지점으로 이동하여 SqlBulkCopy가 올바른 형식의 데이터로 DB에 데이터를 전달할 수 있습니다.

0

내가 문자열을 가지고 엑셀 파일에서 데이터를 복사 할 생각되었다에서 같은 문제가 있었고, 난 그들을 두 번 같은 데이터베이스에 저장하고 싶었다. 나는 아래의 질문에 관련된 코드를 붙여 넣은 : - 첫 번째 시트에서

DataTable dt = new DataTable(); 

// 데이터 읽기를

connExcel.Open(); 
    cmdExcel.CommandText = "SELECT * From [" + SheetName + "] "; 
     oda.SelectCommand = cmdExcel; 
     oda.Fill(dt); 
     connExcel.Close(); 


     Convert.ToDouble(dt.Columns["Product"]); 

// 제품 (제품 온도는) 그 데이터 형 데이터베이스의 열은 어디 는 float이고 Excel 파일에는 string이 있습니다.