在if语句中使用连接字符串

Jos*_*ph 1 .net vb.net scope if-statement

我的连接字符串可能会出现什么问题.它报告cnn未声明.

        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
Run Code Online (Sandbox Code Playgroud)

Cro*_*ono 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
Run Code Online (Sandbox Code Playgroud)

或者,使其更短更清晰:

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)
Run Code Online (Sandbox Code Playgroud)

  • 由于[tag:VB.NET]中允许使用VS2008内联`If`语句. (3认同)
  • @Dom应尽可能避免使用`iif`,它仅用于向后兼容.无论条件如何,它实际上都会执行True和False部分.`if`是.NET的方法,适当的短路和所有. (2认同)