我们有一个存储过程,它返回一列字符串。我们希望使用SqlHelper.ExecuteReader(ConnectionString,...)来返回一个列表< string>但不确定语法。如何使用SQLReader返回列表<string>
我应该更加明确。我不想循环阅读并自己创建列表。我希望能有更简洁的'单线'或者一些我不知道的演员。
我们有一个存储过程,它返回一列字符串。我们希望使用SqlHelper.ExecuteReader(ConnectionString,...)来返回一个列表< string>但不确定语法。如何使用SQLReader返回列表<string>
我应该更加明确。我不想循环阅读并自己创建列表。我希望能有更简洁的'单线'或者一些我不知道的演员。
您可以使用此扩展方法:
public static IEnumerable<IDataRecord> AsEnumerable(this IDataReader reader)
{
while (reader.Read())
{
yield return reader;
}
}
...
using (var reader = SqlHelper.ExecuteReader(connectionString, query))
{
var list = reader.AsEnumerable().Select(r => r.GetString(0)).ToList();
}
谢谢我正在寻找这样的东西。我们有几种类型的查询,我希望能够比阅读器循环更简洁。 – Gio 2012-02-20 19:19:09
@Gio,只是一个警告:不要尝试像'reader.AsEnumerable()。ToList()'这样的东西,它不会工作...列表中的所有项目都会引用最后一行。您在枚举时需要提取数据。 – 2012-02-20 19:24:11
看看Retrieving Data Using a C# .NET DataReader。该示例为解决这个问题提供了解决方案。
您是否尝试过这样的事情?
var sl = new List<string>();
// Edit accordingly
string sql = "";
// Edit accordingly
string cs = "Data Source= ;Initial Catalog= ;Integrated Security= ;";
using (var conn = new SqlConnection(cs))
{
conn.Open();
using (var cmd = new SqlCommand(sql, conn))
{
using (var dr = new command.ExecuteReader())
{
var myRow = dr["MyColumn"];
sl.Add(myRow.ToString());
}
}
}
这提供SQLHelper? http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/fd9229c0-53d0-4b3b-a7da-5df4047343a3 – 2012-02-20 19:06:58
见例如:http://stackoverflow.com/questions/2586674/c-这是正确的方式使用的sqldatareader为daab – 2012-02-20 19:08:06
好吧它没有在DNN世界过时。事实上,它在DNN第4版和第5版中被广泛使用。不要那么快地判断。 – Gio 2012-02-20 19:10:21