C# Can';t将数据表值赋给字符串

C# Can';t将数据表值赋给字符串,c#,asp.net,C#,Asp.net,嘿,伙计们,我们有一个非常简单的数据表,它通过excel通过以下方式导入: cmdExcel.CommandText = "SELECT * From [" + SheetName + "A:B]"; oda.SelectCommand = cmdExcel; oda.Fill(dt); 我不使用任何标题,因此列的名称是默认的-F1和F2。问题是,我无法将第二列中的任何值赋给变量。但是第一个的值可以正确分配 string firstColumn = dt.Rows[1]["F1"] as st

嘿,伙计们,我们有一个非常简单的数据表,它通过excel通过以下方式导入:

cmdExcel.CommandText = "SELECT * From [" + SheetName + "A:B]";
oda.SelectCommand = cmdExcel;
oda.Fill(dt);
我不使用任何标题,因此列的名称是默认的-F1和F2。问题是,我无法将第二列中的任何值赋给变量。但是第一个的值可以正确分配

string firstColumn = dt.Rows[1]["F1"] as string;
string secondColumn = dt.Rows[1]["F2"] as string;
我附加了一个屏幕,在这里你们可以看到,什么是在数据表。在第一列中存储“ABC”,这是正常的,但第二列的值为空。这应该很容易,但这里出了点问题,我不知道是什么。你能帮我吗


将其显式强制转换为
Int32
,而不是如下所示的字符串:

int secondColumn = Convert.ToInt32(dt.Rows[1]["F2"]);
您的屏幕截图将其显示为整数值。所以,如果将其转换为整数,它应该可以工作

dt.Rows[1]["F1"]
这似乎是矛盾的

  • dt.Rows[1]
    检索文档的第二行
  • “F1”
    可在文档的第一行找到
但是,您声称第一次分配有效。我觉得这很奇怪(Excel不使用基于0的索引),但我假设您知道自己在说什么

这确实意味着另一种分配没有意义

dt.Rows[1]["F2"]
如果您声称检索到了
dt.Rows[1][“F1”]
,那么我希望在
dt.Rows[2]
上找到字段F2,而不是
dt.Rows[1]



无论问题发生在代码的第一行还是第二行,我认为您试图检索的字段根本不存在于您正在寻址的特定行中。

dt.Rows[1][“F2”]的确切值是多少?
dt.Rows[1][“F2”].GetType().FullName
返回什么?它可能是一个int-dont
as字符串,它返回double,这就是问题所在。谢谢你,马克。我只是想,如果它是由excel导入的,并且dt是自动创建的,那么所有的单元格都将是相同的类型-字符串。