2015-10-06 65 views
0

我找回我的MainForm:登錄後出現錯誤:「已經有一個打開的DataReader與此連接關聯,必須先關閉該連接?」

Try 
     rs.Connection = con 
     cmd = "select * from cdcol.currency_rate" 
     rs.CommandText = cmd 
     res = rs.ExecuteReader 

     While res.Read 
      Dim currency = res.GetString("currency") 
      ComboBox2.Items.Add(currency) 
     End While 
     res.Close() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

,這在我的TabControl

Try 
      rs.Connection = con 
      cmd = "select * from cdcol.currency_rate where currency='" & ComboBox2.Text & "'" 
      rs.CommandText = cmd 
      res = rs.ExecuteReader 
     While res.Read 
      If sell.Checked = True Then 
       buy.Text = res.GetDouble("buy_rate") 
       coderate.Text = res.GetString("code") 
      End If 
      If buy.Checked = True Then 
       sell.Text = res.GetDouble("sell_rate") 
       coderate.Text = ("PHP") 
      End If 
     End While 
     res.Close() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

當我登錄時出現錯誤, 有什麼錯我的代碼? 請幫助我..

回答

0

有幾件事情可以去上,很難說沒有所有的代碼,但我給你的一些想法。我假設這是一個WinForms應用程序(也假設這是SQL Server)?

如果您已驗證所有DataReader已正確關閉,那麼有可能您有兩個DataReader實際試圖同時閱讀,如果他們在您的程序中使用了共享連接(您說你'重新使用一個選項卡控件並執行一個查詢,如果你有一個閱讀器在某處運行,然後你點擊一個可以運行到該場景的選項卡)。如果這是你想要的行爲,您可以通過添加多個活動結果允許多個記錄設置標誌,您的連接字符串:

https://msdn.microsoft.com/en-us/library/h32h3abf(v=vs.110).aspx

事情是這樣的:

Dim connectionString As String = "Data Source=MSSQL1;" & _ 
"Initial Catalog=AdventureWorks;Integrated Security=SSPI;" & _ 
"MultipleActiveResultSets=True" 

MSDN文章給你多少更多關於它的信息。在你的情況下,這可能會起作用。 MSDN提供這雖然(這是你的其他選擇,使用每個你需要它,處理它,當你做方法的連接):

「MARS的目的不是要消除所有要求多 連接在一個應用程序如果一個應用程序需要真正的並行執行 針對服務器的命令,應該使用多個連接 。「

相關問題