0

ストアド プロシージャに多数の値を渡すパラメーターの 1 つと、MS ReportViewer にバインドするためにデータセットに変換して返される結果に関連する問題がいくつかあります。

私が得ているエラーは、リーダーが閉じていることを示しています。

関連するコード スニペットは次のとおりです。

    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()

誰でも助けてもらえますか?

ありがとう

4

1 に答える 1

0

_resultDataSet.Load が単独で実行されるため、_reader.Read を呼び出さないでください。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

それが役立つことを願っています

于 2012-11-19T20:30:35.787 に答える