2014-04-04 36 views
1

這裏我的連接字符串有什麼問題pls。它報告cnn未申報。在if語句中使用連接字符串

 Dim cnn As New OleDbConnection 
     If rdbtnNewDbase.Checked = True Then 
      Dim cnn As new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=false; Data Source=..\HCHPClosedIn11.mdb") 
     ElseIf rdbtnOldDbase.Checked = True Then 
      Dim cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=false; Data Source=..\HCHPold.mdb") 
     End If 
+0

你會得到一個錯誤?爲什麼不創建兩個連接並有條件地訪問它們? – Plutonix

+1

你爲什麼不停地重新調光cnn。爲什麼不在if語句中使用'cnn = xxxxx' – logixologist

+2

這是否甚至可以編譯?回答它沒有。 「變量'cnn'在一個封閉塊中隱藏了一個變量」 - 試着看看那個錯誤 –

回答

5

您嘗試在If/End If範圍內重新聲明連接對象。就這樣,你的代碼甚至不能編譯。此外,變量不能在它們被宣佈範圍外使用

你真正想要做的是什麼:

Dim cnn As OleDbConnection 
If rdbtnNewDbase.Checked = True Then 
    cnn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=false; Data Source=..\HCHPClosedIn11.mdb") 
ElseIf rdbtnOldDbase.Checked = True Then 
    cnn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=false; Data Source=..\HCHPold.mdb") 
End If 

或者,使其更短,更清晰:

Dim cs As String = 
    "Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=false; Data Source=..\" & 
    If(rdbtnNewDbase.Checked, "HCHPClosedIn11.mdb", "HCHPold.mdb") 

Dim cnn As New OleDbConnection(cs) 
+0

在你的縮短的例子中,不應該是Iff而不是簡單的如果? –

+3

由於VS2008內嵌'If'語句在[tag:VB.NET]中是允許的。 – Crono

+2

@Dom儘可能避免使用'iif',它只是爲了向後兼容。無論條件如何,它都會真正執行True和False部分。 '如果'是.NET的方式來做到這一點,適當的短路和所有。 –

1

試試這個:

Using cnn As New OleDbConnection(string.Format(
    "Provider=Microsoft.Jet.OLEDB.4.0; Persist Security Info=false; Data Source=..\{0}", 
    If(rdbtnNewDbase.Checked, "HCHPClosedIn11.mdb", "HCHPHold.mdb")) 

    '... 
End Using 
+0

這當然假設連接立即被使用。仍然是+1。 – Crono

+0

我相信.Net中的短對象生命週期:如果你在使用它之前很久就創建了連接對象實例,那麼你做錯了什麼。 –

+0

沒錯,但這並不意味着連接必須在創建的確切範圍內使用。例如,工廠類的'CreateConnection'方法將返回它創建的連接。因此,調用者有責任處理它。 – Crono