【问题标题】:select statements how to read all from "*"选择语句如何从“*”中读取所有内容
【发布时间】:2010-09-10 09:16:43
【问题描述】:

我的声明:

string sqlCommandText = "SELECT * FROM ForumThread WHERE";

我如何从中读取*

我正在尝试这样,但它不起作用:

if (reader["*"] != DBNull.Value)
{
    result.TextContent = Convert.ToString(reader["*"]);
}

【问题讨论】:

  • 尽量避免在 select 语句中使用 * 并明确指定列。这对性能更好,你留下一个提示,你在代码中追求哪些字段。
  • 老兄,你需要先找到一篇关于 SQL(T-SQL、PL/SQL、MySQL)的不错的介绍性文章/书籍....

标签: c# sql asp.net-mvc


【解决方案1】:

* 不是一列,它是对SELECT 的指令,让其抓取它可以找到的每一列。

但列将单独显示,因此您需要逐列遍历并获取其内容。

要获取列内容,您可以这样做:

StringBuilder sb = new StringBuilder();
for (int index = 0; index < reader.FieldCount; index++)
{
    object value = reader[index];
    if (value != DBNull.Value)
        sb.Append(value.ToString());
}
result.TextContent = sb.ToString();

但是,这将导致所有内容都被混合在一起。

例如,如果您的结果集如下所示:

A    B    C    D
10   20   30   Some name here

那么你得到的字符串将如下所示:

102030这里有个名字

这是你想要的吗?

也许你告诉我们你想要完成什么,我们能想出更好的答案吗?

【讨论】:

    【解决方案2】:

    此外,您可以使用此方法检索关联的字段名称:

    reader.GetName( /* index of the column */);
    

    【讨论】:

      【解决方案3】:

      假设您的 ForumThread 表包含 ThreadResponse 列,而您确实想读取 ThreadResponse 列,您可以使用以下代码:

      //calculates the column ordinal based on column name
      int ThreadResponseColumnIdx = reader.GetOrdinal("ThreadResponse");
      
      //If there is a line in the result
      if (reader.Read())
      {
        //read from the current line the ThreadResponse column
        result.TextContent = reader.GetString(ThreadResponseColumnIdx);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多