【问题标题】:C# - Getting record from a row using DataRowC# - 使用 DataRow 从行中获取记录
【发布时间】:2012-06-10 16:55:40
【问题描述】:

我正在尝试使用 DataRow 获取行记录。这是我到目前为止所做的:

 uID = int.Parse(Request.QueryString["id"]);
 PhotoDataSetTableAdapters.MembersTableAdapter mem = new PhotoDataSetTableAdapters.MembersTableAdapter();
 PhotoDataSet.MembersDataTable memTable = mem.GetMemberByID(uID);
 DataRow[] dr = memTable.Select("userID = uID");
 string uName = dr["username"].ToString();

然后我得到了错误:

无法将类型'string'隐式转换为'int'

错误指向"username"。我不知道出了什么问题,因为我只是想将一个字符串变量分配给一个字符串值。有人弄清楚错误的原因吗?请帮忙,谢谢。

【问题讨论】:

  • userIDuID 列有哪些类型?

标签: c# row record datarow


【解决方案1】:

更改以下语句

DataRow[] dr = memTable.Select("userID = uID");

DataRow[] dr = memTable.Select("userID = "+ uID);

【讨论】:

  • 问题是查询试图将 userID 列与“uID”字符串进行比较。您需要创建一个包含 uID 值的表达式。因此,如果 uID = 4,则表达式将为“userID = 4”。这将解决它。
  • 谢谢,我知道了。但是错误与它无关不是吗?
【解决方案2】:

您实际上想要DataTable 中单个DataRow 的用户名,对吗?

String uName = memTable.AsEnumerable().Single().Field<String>("username");

请注意,如果DataTable 中有不止一行,则会引发异常。但是由于您将 ID 传递给 DataAdapter,我假设它应该只返回一条记录。

【讨论】:

  • 问题出在查询中,当它被执行时。
  • @ivowiblo:不,问题是 OP 实际上有一个带有一个 DataRow 的 DataTable,因为他已经将 id 传递给了 DataAdapter。因此Select 似乎是多余的。他只需要取第一行/单行的username 字段。
  • 原来如此,也谢谢你的解释。
【解决方案3】:

似乎有两个问题。一个是 Asif 建议 uID 应该是“userId =” + uID (应该可能将 uID 转换为字符串),并且正如 Tim 指出的那样, dr 是一个数据行数组。您也可以通过索引访问它: dr[0]["userName"].ToString()

【讨论】:

    猜你喜欢
    • 2014-04-13
    • 2010-12-21
    • 2010-11-21
    • 1970-01-01
    • 2011-02-17
    • 2010-09-30
    • 2013-09-01
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多