【问题标题】:How to read entire row from database to c#?如何从数据库读取整行到c#?
【发布时间】:2018-04-25 20:26:51
【问题描述】:

假设以下代码返回整个结果行:

using (SqlCommand cmdMessages = new SqlCommand("SELECT * FROM Email where Sender = @usernameLog", conn))
{
    cmdMessages.Parameters.Add(new SqlParameter("@usernameLog", Sender));

    using (SqlDataReader reader = cmdMessages.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.Write(); // Receiver's Name which comes from database
            Console.Write();// The message which comes from same row as the receiver's name
        }
    }
}

查询在 SQL Server 中运行良好。

SQL Server 的输出:

 User      hi   

我想在控制台有相同的输出。

【问题讨论】:

  • 是什么让您认为代码不会返回整行?事实上,它可能会返回几行或多行。
  • 使用索引器时发生了什么? reader["some column name"]
  • Read 并感到惊讶。
  • 我的错!参数有异常。

标签: c# sql-server ado.net


【解决方案1】:

如果您只想在遍历数据读取器时显示正在检索的值,您可以简单地执行以下操作:

using (SqlCommand cmdMessages = new SqlCommand("SELECT * FROM Email where Sender = @usernameLog", conn))
{
     cmdMessages.Parameters.Add(new SqlParameter("@usernameLog", Sender));
     using (SqlDataReader reader = cmdMessages.ExecuteReader())
     {
         int count = reader.FieldCount;
         while (reader.Read())
         {
             for(int i = 0 ; i < count ; i++) 
             {
                  Console.WriteLine(reader.GetValue(i));
             }
         }
     }
}

使用int count = reader.FieldCount; 计算您返回的字段数。然后,您将使用 for 语句进行迭代。

如果您只想显示 2 个值,您可以简单地将 for 替换为: Console.WriteLine(reader.GetValue(0) + " " + reader.GetValue(1));

【讨论】:

    【解决方案2】:

    获取您需要的列值:

    while (reader.Read())
            {
                   reader.GetString(1);
                   reader.Getstring(2);
             }
    
    or
    reader.GetString("ColumnName1");
    reader.GetString("ColumnName2");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多