【问题标题】:DataRow Column Has Value When Read One Way, But Not When Read a Different WayDataRow 列在以一种方式读取时具有价值,但在以不同方式读取时则没有
【发布时间】:2017-01-15 15:24:15
【问题描述】:

我正在尝试从存储过程返回的 C#/ASP.NET 中的 DataSet 中读取值。通常,该 DataSet 中的 DefaultView 被传递到 ASP.NET 页中的 GridView。在那种情况下,我感兴趣的特定列具有价值。但是,如果我尝试读取 DataRow 并获取列值,它会显示为空。

例如,这将显示一个值:

DataSet ds = //////
DataView dv = ds.Tables[0].DefaultView;
grdQuotes.DataSource = dv;
grdQuotes.DataBind();

然而,这没有给我任何价值:

DataSet ds = //////
foreach (DataRow row in ds.Tables[0].Rows) {
    String value1 = (String)row["DOReviewDate"];
    String value2 = ((Object)row["DOReviewDate"]).ToString();
    String value3 = row.Field<String >("DOReviewDate");
}

所有三个变量最终都为空。

我很不知道该去哪里,因为很明显从 SQL 数据库中提取了一个值,否则它不会显示在页面上的 GridView 表中。此外,我可以毫无问题地获取行中的其余列值。有趣的是,还有另一列表现出相同的行为。

-- 编辑--

尝试遍历行和列来获取数据:

StringBuilder sb = new StringBuilder();
foreach (DataRow row in ds.Tables[0].Rows)
{
    StringBuilder r = new StringBuilder();
    foreach (DataColumn c in ds.Tables[0].Columns)
    {
        r.Append(String.Format("{0} | ", row[c]));
    }
    r.Append("END");
    sb.AppendLine(r.ToString());
}

【问题讨论】:

  • DOReviewDate 列的数据类型是什么?
  • 出于故障排除的目的,我建议您编写一些代码来遍历所有 TablesRows 和 Fields,这样您就可以看到发生了什么(或者您可以设置一个断点并通过 Watch 进行检查)。可能是 Table[0] 包含来自 T-SQL 的消息(例如,如果您忘记了 SET NOCOUNT ON
  • 数据类型为字符串。此外,我已经遍历了完整的列列表,并且让它踢出使用 DataColumn 引用的数据仍然没有产生任何结果。至于从数据库返回的内容,我无法真正控制它,因为我没有创建它,也没有管理它。我将在我的帖子中添加一个编辑以显示我尝试过的内容。

标签: c# asp.net


【解决方案1】:

我终于能够找到支持此功能的存储过程。它为我需要的列返回空值。只有一个空字符串指定要返回的内容。因此,虽然我似乎无法在页面构造中找到该功能,但似乎存在某种连接或替代搜索来提取数据,并且我相信我找到了要从中提取的表。猜猜我只需要把这个初始数据返回给我,然后用它从另一个表中提取。或者,我想,也许可以使用连接进行我自己的 SQL 搜索。无论哪种方式,存储过程本身都不包含我需要的表的连接。这是存储过程中的内容:

'' as DOReviewDate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多