2011-07-19 54 views
-2

任何人都可以向我解釋如何將此示例函數轉換爲使用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++; 
        } 
       } 

    } 
+0

我不明白它如何循環通過datareader的行數。我知道我可以將dsExampleResults更改爲SqlDataReader drExampleResults,然後將ExecuteReader而不是數據集。但處理返回的數據是我掛斷的地方。 – user234702

回答

0

假設你有你的SqlDataAccess類中的方法返回一個DataReader,您只需使用

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

記住,你需要expicitly接近SqlDataReaders否則,直到垃圾回收

它們會消耗數據庫連接
+0

'使用'語句是你的朋友,只要關閉數據讀取器等。 – Oded

相關問題