2012-11-19 49 views
0

我有一些問題涉及將一些值傳遞給存儲過程的參數以及返回轉換爲數據集的結果這將綁定到MS ReportViewer。使用stringbuilder作爲存儲過程的參數並返回數據集

我得到的錯誤說讀者已關閉。

我的相關代碼段是:

Dim _listOfSites As New StringBuilder() 
    Dim _resultDataSet As DataSet = New DataSet 

    Using _conn as New SqlConnection() 

    _conn.ConnectionString = _connString 

     Try 

      For i as Integer = 0 To _sites.Count - 1 
      _listOfSites.Append(_sites(i)) 
       If _sites.Count > 1 Then 
       _listOfSites.Append(",") 
       End If 
      Next 

      _conn.Open() 

      Dim _sqlCommand as SqlCommand = New SqlCommand("GetResults", _conn) 

      _sqlCommand.Parameters.Add("@Sites", SqlDbType.Varchar).Value = _listOfSites 
      _sqlCommand.Parameters.Add("@Date", SqlDbType.Date).Value = _date 

     Dim _reader as SqlDataReader = _sqlCommand.ExecuteReader 

     While _reader.Read 
       _resultDataSet.Load(_reader, LoadOption.PreserveChanges, New String() {"RegionalResults"}) 
     End While 
     _reader.Close() 

任何人都可以請幫助?

感謝

回答

0

看起來你不應該叫_reader.Read作爲_resultDataSet.Load本身做到這一點,它可以關閉SqlDataReader中。因此,而不是

Dim _reader as SqlDataReader = _sqlCommand.ExecuteReader 

While _reader.Read 
      _resultDataSet.Load(_reader, LoadOption.PreserveChanges, New String() {"RegionalResults"}) 
End While 
_reader.Close() 

只要寫

Using _reader as SqlDataReader = _sqlCommand.ExecuteReader 
     _resultDataSet.Load(_reader, LoadOption.PreserveChanges, New String() {"RegionalResults"}) 
End Using 

希望幫助

+0

感謝。我會試一試。但是,你知道如何傳遞一個stringbuilder,它可以包含一個或多個值到存儲過程來執行查詢。 – Andy5

+0

這是不可能的,只有sql db類型參數可以傳遞給存儲過程(一個clr過程也不會,允許它 - http://msdn.microsoft.com/en-us/library/ms131094.aspx)。你可以使它成爲一個字符串並傳遞給sp。 – Artyom

相關問題