【问题标题】:Can't assign data table value into string无法将数据表值分配给字符串
【发布时间】:2017-07-27 20:22:50
【问题描述】:

大家好,有一个非常简单的数据表,它是通过 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;

我附上了一个屏幕,您可以在其中看到数据表中的内容。在 firstColumn 中存储了“ABC”,这很好,但 secondColumn 的值为空。这应该很容易,但是这里出了点问题,我不知道是什么。你能帮帮我吗?

【问题讨论】:

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

标签: c# asp.net


【解决方案1】:
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]


无论问题出现在第一行还是第二行代码中,我认为您尝试检索的字段根本不存在于您正在处理的特定行中。

【讨论】:

    【解决方案2】:

    将其显式转换为Int32,而不是像下面这样的字符串:

    int secondColumn = Convert.ToInt32(dt.Rows[1]["F2"]);
    

    您的屏幕截图将其显示为整数值。因此,如果您将其转换为整数,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多