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