Vb.net 连接字符串不正确

Vb.net 连接字符串不正确,vb.net,connection-string,recordset,Vb.net,Connection String,Recordset,我在VisualStudio2010中制作windows应用程序。然后我添加一个数据库。 数据库属性为: 名称:C:\USERS\ADMINISTRATOR\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\WINDOWSAPPLICATION4\WINDOWSAPPLICATION4\DATABASE1.MDF 连接字符串:数据源=。\SQLEXPRESS;AttachDbFilename=“C:\Users\Administrator\documents\visua

我在VisualStudio2010中制作windows应用程序。然后我添加一个数据库。 数据库属性为:

名称:C:\USERS\ADMINISTRATOR\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\WINDOWSAPPLICATION4\WINDOWSAPPLICATION4\DATABASE1.MDF

连接字符串:数据源=。\SQLEXPRESS;AttachDbFilename=“C:\Users\Administrator\documents\visual studio 2010\Projects\WindowsApplication4\WindowsApplication4\Database1.mdf”;综合安全=真实;用户实例=True

提供程序:.NET Framework SQL Server数据提供程序

类型:Microsoft SQL Server

版本:10.00.5500

我写这段代码:

  Dim cn As New ADODB.Connection()
    cn.Open("provider= SQLOLEDB.1;Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Administrator\documents\visual studio 2010\Projects\WindowsApplication4\WindowsApplication4\Database1.mdf;User Instance=True")
    Dim rs As New ADODB.Recordset()
    rs.Open(("Select from TB Where Surname = Stylianou  "), cn)
    While Not rs.EOF
        MsgBox("here")
    End While
调试器说:无效的连接字符串属性有几点:

  • 您试图使用旧的方法(即记录集)从数据库中读取数据
  • 您没有在应该使用的地方使用该类(它针对SQL Server进行了优化)
  • 您可以使用
  • 值实际上应该作为参数传递(这有助于避免SQL注入攻击,如果值中有撇号,则可以使其工作),而不是直接将其写入SQL查询字符串中
你可以有这样的东西:

Imports System.Data.SqlClient

' ...

Private Sub LoadData()
    Dim cnsb As New SqlConnectionStringBuilder
    cnsb.DataSource = ".\SQLEXPRESS"
    cnsb.AttachDBFilename = "C:\Users\Administrator\documents\visual studio 2010\Projects\WindowsApplication4\WindowsApplication4\Database1.mdf"
    cnsb.IntegratedSecurity = True
    cnsb.UserInstance = True

    Using conn As New SqlConnection(cnsb.ConnectionString())
        'TODO: Put in the actual column names you want returned
        Dim sql As String = "SELECT [Column1], [Column2] FROM [TB] WHERE [Surname] = @Surname"
        Using sqlCmd As New SqlCommand(sql, conn)
            'TODO: Use the actual .SqlDbType and .Size for the [Surname] column
            sqlCmd.Parameters.Add(New SqlParameter With {.ParameterName = "@Surname", .SqlDbType = SqlDbType.NVarChar, .Size = 50, .Value = "Stylianou"})
            Dim rdr As SqlDataReader = sqlCmd.ExecuteReader()
            While rdr.Read()
                ' do something with the results
                MsgBox(String.Format("Col1={0}, Col2={1}", rdr.GetString(0), rdr.GetString(1)))
            End While
        End Using

    End Using

End Sub
如果有任何命令在那里,你想了解更多(我相信你是这样做的;),然后。在Visual Studio中,将光标放在命令名中,然后按F1键

编辑:连接字符串不起作用的原因可能是文件名中有空格。如果查看SqlConnectionStringBuilder提供的值,它会自动将文件名括在双引号中。但是,我确实建议使用上述样式的代码,而不是您的代码。

有几点:

  • 您试图使用旧的方法(即记录集)从数据库中读取数据
  • 您没有在应该使用的地方使用该类(它针对SQL Server进行了优化)
  • 您可以使用
  • 值实际上应该作为参数传递(这有助于避免SQL注入攻击,如果值中有撇号,则可以使其工作),而不是直接将其写入SQL查询字符串中
你可以有这样的东西:

Imports System.Data.SqlClient

' ...

Private Sub LoadData()
    Dim cnsb As New SqlConnectionStringBuilder
    cnsb.DataSource = ".\SQLEXPRESS"
    cnsb.AttachDBFilename = "C:\Users\Administrator\documents\visual studio 2010\Projects\WindowsApplication4\WindowsApplication4\Database1.mdf"
    cnsb.IntegratedSecurity = True
    cnsb.UserInstance = True

    Using conn As New SqlConnection(cnsb.ConnectionString())
        'TODO: Put in the actual column names you want returned
        Dim sql As String = "SELECT [Column1], [Column2] FROM [TB] WHERE [Surname] = @Surname"
        Using sqlCmd As New SqlCommand(sql, conn)
            'TODO: Use the actual .SqlDbType and .Size for the [Surname] column
            sqlCmd.Parameters.Add(New SqlParameter With {.ParameterName = "@Surname", .SqlDbType = SqlDbType.NVarChar, .Size = 50, .Value = "Stylianou"})
            Dim rdr As SqlDataReader = sqlCmd.ExecuteReader()
            While rdr.Read()
                ' do something with the results
                MsgBox(String.Format("Col1={0}, Col2={1}", rdr.GetString(0), rdr.GetString(1)))
            End While
        End Using

    End Using

End Sub
如果有任何命令在那里,你想了解更多(我相信你是这样做的;),然后。在Visual Studio中,将光标放在命令名中,然后按F1键

编辑:连接字符串不起作用的原因可能是文件名中有空格。如果查看SqlConnectionStringBuilder提供的值,它会自动将文件名括在双引号中。但是,我真的建议使用上述样式的代码,而不是您的代码