我将数据从Excel工作表导入数据表,我对数据类型有疑问/疑问。当我创建数据表时,我添加了列及其数据类型。在此之后我从excel导入数据,这很好。当我检查列的数据类型时,它会说出我的期望。但是,当我尝试将值传递给函数时,我得到的消息是我试图传递一个对象类型,而不是我设置的数据类型。
这是我的代码(它是一个简化的数据集):
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 :(得分:0)
函数'form.write()'接受一个整数。
由于form.Write
接受整数,您需要将其从对象强制转换为int
:
int a = dtTest.Rows[0].Field<int>("a");
form.write(a);
C#中不允许后期绑定,您必须在编译时使用正确的类型。
答案 1 :(得分:0)
如果我正确理解你的帖子,你可能需要施放值。
form.write(dtTest.Rows[0]["a"]);
我认为应该是:
form.write(Convert.ToInt32(dtTest.Rows[0]["a"]));
如果没有Convert.ToInt32(),则引用对象类型。