2013-06-06 3 views
0

Я импортирую данные с листа excel в datatable, и у меня возникла проблема/вопрос о типах данных. Когда я создаю datatable, я добавляю столбцы и их типы данных. После этого я импортирую данные из excel, и это отлично работает. Когда я проверяю тип данных столбцов, он говорит, что я ожидаю. Однако, когда я пытаюсь передать значение функции, я получаю сообщение о том, что я пытаюсь передать тип объекта, а не тип данных, который я установил.C# datatable column datatype

вот мой код (это упрощенный набор данных):

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()' принимает целое число.

Поскольку form.Write принимает целое число, вам нужно брось от объекта int:

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

позднего связывания не допускается в C#, вы должны использовать правильный тип во время компиляции.

0

Если я правильно понимаю ваше сообщение, вам может понадобиться указать значение.

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

Я считаю, что это должно быть:

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

Без Convert.ToInt32() вы ссылаетесь тип объекта.

Смежные вопросы