2013-06-06 3 views
0

Excel 시트에서 데이터 테이블로 데이터를 가져 오는 중 데이터 유형에 대해 문제가 있거나 질문이 있습니다. 데이터 테이블을 만들 때 열과 해당 데이터 유형을 추가합니다. 이 후 Excel에서 데이터를 가져오고이 작동합니다. 열의 데이터 유형을 검사 할 때 예상되는 결과가 표시됩니다. 그러나 함수에 값을 전달하려고 할 때 설정 한 데이터 유형 대신 객체 유형을 전달하려고한다는 메시지가 표시됩니다.C# datatable 열 데이터 형식

여기 내 코드입니다 (이것은 단순화 된 데이터 세트의) :

public void importData(string _file) 
    { 
     DataTable dtTest = new DataTable(); 
     dtTest.Columns.Add("a", typeof(Int32)); 
     dtTest.Columns.Add("b", typeof(Int32)); 

     string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data  Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", _file); 
     OleDbConnection conn = new OleDbConnection(connString); 

     conn.Open(); 

     OleDbDataAdapter objAdapter = new OleDbDataAdapter(); 

     string sheetName = "Sheet1"; 
     string sql = "SELECT * FROM [" + sheetName + "$]"; 

     OleDbCommand objCmdSelect = new OleDbCommand(sql, conn); 
     objAdapter.SelectCommand = objCmdSelect; 

     objAdapter.Fill(dtTest); 
     conn.Close(); 

     form.write(dtTest.Rows[0]["a"]); 
    } 

기능 'form.write은()'의 정수를 받아들입니다.

form.write에 값을 전달하기 전에 데이터 유형을 검사 할 때 Int32라고 표시됩니다.

if (dtTest.Columns[0].DataType == typeof(Int32)) 
     { 
      //this is true 
     } 

내가 뭘 잘못하고 있니?

답변

0

'form.write()'함수는 정수를 허용합니다. 늦은 바인딩은 C#으로 허용되지 않습니다

int a = dtTest.Rows[0].Field<int>("a"); 
form.write(a); 

, 당신은 컴파일 시간에 올바른 유형을 사용해야합니다 form.Write 이후

당신은 int에 개체에서 캐스팅 할 필요가 정수를 받아들입니다.

0

게시물을 올바르게 이해하고 있다면 값을 전송해야 할 수 있습니다.

form.write(dtTest.Rows[0]["a"]); 

나는 그것이 있어야 생각 :

form.write(Convert.ToInt32(dtTest.Rows[0]["a"])); 

을 Convert.ToInt32없이()는 객체 유형을 참조하고 있습니다.