2010-02-26 3 views
4

나는 데이터 테이블 및 SqlBulkCopy의를 통해 그 데이터 테이블을 삽입하려고하지만 어떻게 든 나를 위해 작동하지 않는 것을 만들었습니다 .... 제가 오류가 발생했습니다 SqlBulkCopy의이 작동하지 않는 것 나를

,

The given value of type DateTime from the data source cannot be converted 
to type decimal of the specified target column. 

내 데이터 소스이며,

DataTable dt = new DataTable(); 
    dt.Columns.Add(new DataColumn("EmpId", typeof(Int64))); 
    dt.Columns.Add(new DataColumn("FromDate", typeof(DateTime))); 
    dt.Columns.Add(new DataColumn("ToDate", typeof(DateTime))); 
    dt.Columns.Add(new DataColumn("DaysPresent", typeof(decimal))); 
    dt.Columns.Add(new DataColumn("OpeningAdvance", typeof(double))); 
    dt.Columns.Add(new DataColumn("AdvanceDeducted", typeof(double))); 
    dt.Columns.Add(new DataColumn("RemainingAdvance", typeof(double))); 
    dt.Columns.Add(new DataColumn("SalaryGiven", typeof(double))); 
    dt.Columns.Add(new DataColumn("CreatedDate", typeof(DateTime))); 

    foreach (GridViewRow row in gridEmployee.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      DataRow dr = dt.NewRow(); 
      dr["EmpId"] = Convert.ToInt64(((HiddenField)row.Cells[0].FindControl("HiddenId")).Value); 
      dr["FromDate"] = Convert.ToDateTime(GetMonthNumberFromAbbreviation(fromdate[1].ToString()) + '/' + fromdate[0].ToString() + '/' + fromdate[2].ToString()); 
      dr["ToDate"] = Convert.ToDateTime(GetMonthNumberFromAbbreviation(todate[1].ToString()) + '/' + todate[0].ToString() + '/' + todate[2].ToString()); 
      dr["DaysPresent"] = Convert.ToDecimal(((TextBox)row.Cells[3].FindControl("TxtDaysPresent")).Text); 
      dr["OpeningAdvance"] = Convert.ToDouble(((TextBox)row.Cells[4].FindControl("txtOpeningAdv")).Text); 
      dr["AdvanceDeducted"] = Convert.ToDouble(((TextBox)row.Cells[5].FindControl("TxtAdvanceDeducted")).Text); 
      dr["RemainingAdvance"] = Convert.ToDouble(((TextBox)row.Cells[6].FindControl("TxtClosingAdvance")).Text); 
      dr["SalaryGiven"] = Convert.ToDouble(((TextBox)row.Cells[7].FindControl("TxtSalary")).Text); 
      dr["CreatedDate"] = Convert.ToDateTime(System.DateTime.Now.ToString()); 
      dt.Rows.Add(dr); 
     } 
    } 
    SqlBulkCopy sbc = new SqlBulkCopy(connectionString); 
    sbc.DestinationTableName = "SalaryDetails"; 
    sbc.WriteToServer(dt); 
    sbc.Close(); 

그리고 내 대상 테이블은 다음과 같습니다,

alt text http://img231.imageshack.us/img231/5448/mytable.jpg

+0

이미지 열 매핑을 추가하는 방법에 @treaschf 동료 –

답변

6

DataTable과 대상 테이블에 같은 수의 열이 없으므로 열 매핑을 지정해야합니다.

당신은 이런 식으로 작업을 수행 할 수 있습니다

sbc.ColumnMappings.Add("EmpId", "EmpId"); 
sbc.ColumnMappings.Add("FromDate", "FromDate"); 
// and so on, with the rest of the columns; and after that comes 
sbc.WriteToServer(dt); 
sbc.Close(); 
+0

만료되었습니다? –

+0

@treaschf'sbc.ColumnMappings.Add ("EmpId", "EmpId");'이걸 내가하고 싶은 .. –

관련 문제