DataTable에 10 개의 열이 있고 일부 행을 추가 한 후 SqlBulkCopy
을 사용하여 데이터베이스에 추가하려고합니다.C# SqlBulkCopy types mismatch
내 문제는 DataTable에 문자열이 있고 데이터베이스의 일부 필드는 각각 십진수와 날짜입니다. 원하는 데이터 유형으로 변환 할 수있는 방법이 있습니까?
DataTable에 10 개의 열이 있고 일부 행을 추가 한 후 SqlBulkCopy
을 사용하여 데이터베이스에 추가하려고합니다.C# SqlBulkCopy types mismatch
내 문제는 DataTable에 문자열이 있고 데이터베이스의 일부 필드는 각각 십진수와 날짜입니다. 원하는 데이터 유형으로 변환 할 수있는 방법이 있습니까?
프로그래밍 방식의 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;
좋아, 그럼 행을 추가하면 어떻게 생겼을 까? 문자열에 필요한 모든 정보를 가지고 있으므로 추가하기 전에 변환해야한다고 가정합니다. 예를 들면 다음과 같습니다. DataRow row = dataTable.NewRow(); 행 [ "Price"] = Convert.ToDecimal (blanketInfo [4]); dataTable.Rows.Add (row); 내가 가지고있는 모든 데이터에 대해 그렇게해야 할 것입니까? 아니면 다른 방법이 있습니까? – Rocshy
blanketInfo [4] 유형에 따라 다릅니다. 유형이 대상 필드 유형을 반영하지 않으면 변환해야합니다. 그러나 이미 십진수이면 그냥 할당 할 수 있습니다. –
코드에서 DataTable의 열을 만드는 것처럼 들릴 수 있습니다 (열 데이터 형식을 적절하게 설정하는 DataAdapter를 통해 채우기와 반대).
그럴 경우 모든 문자열 대신 올바른 데이터 형식으로 DataColumns를 만든 다음 행을 추가 할 때 데이터를 적절한 문자열로 변환 할 수 있습니다. 유형?
즉 DataTable에 올바른 유형과 데이터가있는 지점으로 이동하여 SqlBulkCopy가 올바른 형식의 데이터로 DB에 데이터를 전달할 수 있습니다.
내가 문자열을 가지고 엑셀 파일에서 데이터를 복사 할 생각되었다에서 같은 문제가 있었고, 난 그들을 두 번 같은 데이터베이스에 저장하고 싶었다. 나는 아래의 질문에 관련된 코드를 붙여 넣은 : - 첫 번째 시트에서
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이 있습니다.
데이터 테이블에 열을 어떻게 추가합니까? – Arion