【发布时间】:2011-09-27 22:20:58
【问题描述】:
我不怎么使用数据集。通常发现自己使用 ORM 或只是一个基本的 sqlReader.Read(),然后是一些 GetValues()。我正在处理一些遗留代码,这些代码到处都有数据集,并且在修复错误时试图干燥其中的一些。
但是,我似乎无法真正将数据加载到非类型化 DataSet 中。
public static DataSet ExecuteStoredProcedure(string storedProcedure, DBEnum db, IEnumerable<SqlParameter> parameters)
{
DataSet result = new DataSet();
using (SqlConnection connection = SqlHelper.GetSqlConnection(db))
{
SqlCommand command = connection.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = storedProcedure;
if (parameters != null)
foreach (SqlParameter parameter in parameters)
command.Parameters.Add(parameter);
connection.Open();
DataTable table = new DataTable();
using (SqlDataReader reader = command.ExecuteReader())
{
table.Load(reader);
}
result = table.DataSet; // table.DataSet is always empty!
}
return result;
}
我假设 table.Load(reader) 执行了所有必要的 reader.Read() 调用......但我继续尝试在 table.Load() 之前使用和不使用 reader.Read() 都没有有用。
我知道被调用的存储过程实际上是在返回数据。如果我做这样的事情,我可以看到数据就好了:
using(SqlDataReader reader = command.ExecuteReader())
{
reader.Read();
object test = reader.GetValue(0); // returns the expected value
}
似乎我在这里遗漏了一些简单的东西,但我一直在为这个问题摸不着头脑。
这是在 .NET 3.5 中。
【问题讨论】: