【问题标题】:How to use executeReader() method to retrieve the value of just one cell如何使用 executeReader() 方法仅检索一个单元格的值
【发布时间】:2011-08-13 06:21:46
【问题描述】:

我需要执行以下命令并将结果传递给标签。我不知道如何使用 Reader 来做到这一点。有人可以帮帮我吗?

String sql = "SELECT * FROM learer WHERE learer.id = " + index;
SqlCommand cmd = new SqlCommand(sql,conn);
learerLabel.Text = (String) cmd.ExecuteReader();

如您所见,我创建了 SQL 语句并执行了它,但它不起作用。为什么?

控制台说:

不能隐式 SqlDataReader 到 字符串...

我怎样才能得到想要的结果作为字符串,以便标签可以正确显示它。

【问题讨论】:

标签: c# asp.net sql ado.net


【解决方案1】:
using (var conn = new SqlConnection(SomeConnectionString))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = "SELECT * FROM learer WHERE id = @id";
    cmd.Parameters.AddWithValue("@id", index);
    using (var reader = cmd.ExecuteReader())
    {
        if (reader.Read())
        {
            learerLabel.Text = reader.GetString(reader.GetOrdinal("somecolumn"))
        }
    }
}

【讨论】:

  • "reader.GetString(reader.GetOrdinal("somecolumn"))" 是检索文本值的最简单方法?没有什么像 reader.fieldByName("Name").asString ?
  • 感谢您向我展示了如何使用 ExecuteReader() 而不是问题中提出的 Scalar
  • 附注你不能只用表名来做这个变量
【解决方案2】:

不建议使用DataReaderCommand.ExecuteReader 从数据库中仅获取一个 值。相反,您应该使用Command.ExecuteScalar,如下所示:

String sql = "SELECT ColumnNumber FROM learer WHERE learer.id = " + index;
SqlCommand cmd = new SqlCommand(sql,conn);
learerLabel.Text = (String) cmd.ExecuteScalar();

Here 是关于连接到数据库和管理数据的更多信息。

【讨论】:

【解决方案3】:

ExecuteScalar() 是你需要的

【讨论】:

    【解决方案4】:

    Duplicate question 基本上说使用 ExecuteScalar() 代替。

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 2019-12-25
      • 1970-01-01
      • 2011-05-22
      • 2012-02-23
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多