【问题标题】:Comma Separated String from a DataReader ColumnDataReader 列中的逗号分隔字符串
【发布时间】:2012-02-17 03:28:41
【问题描述】:

将 DataReader 的特定列保存到逗号分隔的字符串中的好方法是什么?

例如,这是我现在拥有的:

     StringBuilder sb = new StringBuilder(); 
     Database db = DatabaseFactory.CreateDatabase();
     using(DbCommand dbcmd = mydb.GetStoredProcCommand("ProcStoredProc")) //No Parameters
     {
       IDataReader dr = db.ExecuteReader(sqlcmd)
       while(dr.Read())
       {
                 sb.AppendFormat("{0},",dr["CODE"]);
       }
       dr.Dispose();
     }

     // skipped code to remove the last comma. 
     string CSVString = sb.ToString();

在此示例中,DataReader 包含的行数不会超过 10 行。

谢谢。

【问题讨论】:

  • 你现在有什么问题?
  • 谢谢@Chris Shain:仅仅获得 10 行似乎步骤太多;想知道是否有一种优雅的方法。谢谢。
  • 对我来说看起来不错。您所拥有的大部分内容都与数据库管道有关-语法糖可以缩短它,但它所做的所有工作仍然会发生。
  • 使用DataSet/DataTable会减少代码行数吗?
  • 不太可能,而且会更慢。

标签: c# csv ado.net datareader enterprise-library-5


【解决方案1】:

一些语法糖可能是:

using(var dbcmd = mydb.GetStoredProcCommand("ProcStoredProc"))
using(var dr = db.ExecuteReader(sqlcmd))
  var result = string.Join(",", reader.AsEnumerable().Select (r => r["Code"]));

辅助函数

public static IEnumerable<IDataRecord> AsEnumerable(this IDataReader reader)
{
    while (reader.Read())
        yield return reader;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多