使用datareader而不是dataset执行存储过程

时间:2011-07-19 14:43:52

标签: c#

有人可以向我解释如何将此示例函数转换为使用DataReader而不是DataSet吗?

private void Example(int pIntValue1, pIntValue2)
{

DataSet dsExampleResults;

int i = 0;


using (var daExample = new SqlDataAccess(this.ConnectionString))
{
var cmdExample = daExample.GetStoredProcCommand("Example.dbo.GetExampleData");

                    daExample.AddInParameter(cmdExample, "@param1", DbType.String, name);
                    daExample.AddInParameter(cmdExample, "@param2", DbType.DateTime, date);

                    dsExampleResults = daExample.ExecuteDataSet(cmdExample);
                }

                if (pIntValue1 >= pIntValue2)
                {
                    i = dsExampleResults.Tables[0].Rows.Count;

                    while (i > 0)
                    {
                        i--;
                        decExampleColumn1 = Convert.ToDecimal(dsExampleResults.Tables[0].Rows[i]["column1"]);
                                    decExampleColumn2 = Convert.ToDecimal(dsExampleResults.Tables[0].Rows[i]["column2"]);

                    }

                }
                else
                {
                    i = 0;
                    while (i < dsExampleResults.Tables[0].Rows.Count)
                    {
                        decExampleColumn3 = Convert.ToDecimal(dsExampleResults.Tables[0].Rows[i]["column3"]);
                        decExampleColumn2 = Convert.ToDecimal(dsExampleResults.Tables[0].Rows[i]["column2"]);

                        i++;
                    }
                }

    }

1 个答案:

答案 0 :(得分:0)

假设你的SqlDataAccess类有一个方法来返回一个datareader,你只需使用

While (dataReader.Read())
{
        decExampleColumn1 = Convert.ToDecimal(dataReader["column1"]);
        decExampleColumn2 = Convert.ToDecimal(dataReader["column2"]);
}

请记住,您需要明确关闭SqlDataReaders,否则他们将使用数据库连接,直到垃圾回收