【问题标题】:Connection string problem connecting to local SQL database using VB.NET in Visual Studio在 Visual Studio 中使用 VB.NET 连接到本地 SQL 数据库的连接字符串问题
【发布时间】:2020-12-25 01:36:00
【问题描述】:

我不明白为什么我无法连接到我的 SQL Server Express LocalDB。我不断遇到连接字符串的麻烦。这是我尝试过的:

Imports System.Data.OleDb

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim conString As String        'Connection string
        Dim con As OleDbConnection     'Connecting to your database
        Dim Command As OleDbCommand    'Query  "What do you want in the database"

        'conString = "PROVIDER=System.Data.SqlClient v4.0; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DatabaseInnlogging.mdf;Integrated Security=True"
        'conString = "PROVIDER=SQLOLEDB; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DatabaseInnlogging.mdf;Integrated Security=True"
        'conString = "PROVIDER=System.Data.SqlClient; Data Source=C:\Users\Bruker\source\repos\InnloggingFørsøkv1\InnloggingFørsøkv1\DatabaseInnlogging.mdf;Integrated Security=True"
        'conString = "PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Bruker\source\repos\InnloggingFørsøkv1\InnloggingFørsøkv1\DatabaseInnlogging.mdf;Integrated Security=True"
        'conString = "PROVIDER=System.Data.SqlClient v4.0; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DatabaseInnlogging.mdf;Integrated Security=True"

    Try
           con = New OleDbConnection(conString)
           con.Open()

            Command = New OleDbCommand("select * from LogInTable where UserID = ? and Password = ?", con)



            Dim parm1 As OleDbParameter, parm2 As OleDbParameter

            parm1 = Command.Parameters.Add("@UserID", OleDbType.VarChar)
            parm2 = Command.Parameters.Add("@Password", OleDbType.VarChar)
            parm1.Direction = ParameterDirection.Input
            parm2.Direction = ParameterDirection.Input

            parm1.Value = Me.TextBox1.Text
            parm2.Value = Me.TextBox2.Text

            Command.Connection.Open()
            Dim reader As OleDbDataReader

            If reader.Read = True Then
                Me.DialogResult = DialogResult.OK
            Else
                MsgBox("Invalid UserID or Password")
            End If

            reader = Command.ExecuteReader

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
End Sub

我尝试了几个连接字符串,但都没有工作。

但是对于数字 4,我得到了错误

多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值

其他导致错误:

提供商无法识别

我的另一个尝试是SqlClient

Imports System.Data.SqlClient

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim myConn As SqlConnection
        myConn = New SqlConnection("Initial Catalog=OutComes; Data Source=localhost;Integrated Security=SSPI;")

        '"Data Source = (LocalDB) \ MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DatabaseInnlogging.mdf;Integrated Security=True")

        '  "Data Source=localhost;Integrated Security=SSPI;")

        'Create a Command object.
        Dim myCmd As SqlCommand
        myCmd = myConn.CreateCommand
        myCmd.CommandText = "SELECT UserID, Password FROM LogInTable"

        'Open the connection.
        myConn.Open()

        Dim results As String
        Dim myReader As SqlDataReader
        myReader = myCmd.ExecuteReader()

        'Traverse the DataSet and Display in GUi for Example:
        Do While myReader.Read()
            results = results & myReader.GetString(0) & vbTab &
                myReader.GetString(1) & vbLf
        Loop
        'Display results.
        MsgBox(results)

        ' Close the reader and the database connection.
        myReader.Close()
        myConn.Close()
End Sub

我的错误是:

System.Data.SqlClient.SqlException: '连接到 SQL Server 时发生与网络相关或特定于实例的错误。服务器未找到或不可用。验证实例名称是否正确以及 SQL Server 是否配置为接受外部连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)

我的 SQL Server 数据库中有一个表,其中包含两列 UserIDpassword

如果有人能在这里指出正确的方向,我将不胜感激。我已经阅读了很多关于这个主题的帖子,但似乎无法找到我哪里出错了。我的主要目标是连接我的数据库。

【问题讨论】:

  • 确定您已实际安装 SQL Server Express LocalDB 包??您是否从 Microsoft 站点下载并运行安装?最后一个错误似乎清楚地表明您尝试连接的数据库服务器不存在(例如,未安装)。如果您已经下载并安装了一些东西 - 究竟是什么您安装了什么?
  • 我安装了 sql server,但是为了更好的衡量,我按照你的意图重新安装了它。原始项目未连接,错误消息与之前相同。我上次忘记说的是,我使用表的设计视图连接到数据库没有问题。添加数据源。然后将表格拖放到表格上。这是一个手动练习,我无法开始工作。

标签: sql sql-server vb.net connection-string localdb


【解决方案1】:

由于你是新手,你可以尝试一些可视化工具,它可以帮助你看得更清楚,我建议你尝试这种方法,它是你解决方案的一半:

在您的视觉工作室中:

Menu Tools

Connection to database

在对话框中

Data Source :Microsoft SQL Server (sqlClient)

Server Name :****

你应该在这里找到你的服务器,选择它,否则这意味着你的服务器安装有问题

Authentification :Windows 认证

正如我在您的示例中看到的,您没有使用 SQL id,所以这很好

Connection to database:

选择您已经创建的数据库,如果没有看到 这意味着您没有创建或您无权访问

然后点击按钮Test Connection 如果成功则点击OK

那就去你的ToolBox

Data

DataGridView 将其放入您的表单中 选择数据源:在底部你会看到+ Add the data source 点击它

你会有一个对话框,选择Database -> Dataset -> 选择你的数据连接 您应该在组合框中看到一行带有your server name \ your Database.dbo

勾选"Show the connection string saved in the application"复选框

你会清楚地看到你的连接字符串

下一步 -> 下一步 > 检查表格

完成

如果您卡在某个部分,请告诉我通过编辑来澄清您

【讨论】:

    【解决方案2】:

    首先,谢谢 :),我让它工作了。但我还有一些问题。 我从一个新项目开始,用一张表制作了一个本地 sqlDB 有两个列“UserID”和“Password”。 我在这张表中有一行带有“Admin”和“pass” 我没有使用表格设计器或添加数据源。

    我按照您对信件的描述并在工具连接下复制了我的连接字符串... 效果很好,我找到了 mdf 文件并能够连接到它

    使用数据网格加载表单并将其绑定到数据源。它工作正常

    然后我尝试手动连接到新按钮下的数据库。我收到此错误消息:

    System.Data.SqlClient.SqlException: 
    'Cannot attach file 'C:\Users\Bruker\source\repos\Connect_v2\Connect_v2\bin\Debug\Database1.mdf' 
    as database 'OutComes
    ' because this file is already in use for database 
    'C:\USERS\BRUKER\SOURCE\REPOS\CONNECT_V2\CONNECT_V2\BIN\DEBUG\DATABASE1.MDF''
    
    This was the class:
    
    Imports System.Data.SqlClient
    
    Public Class Form1
       
     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'TODO: This line of code loads data into the 'Database1DataSet.LogInTable' table. You can move, or remove it, as needed.
            Me.LogInTableTableAdapter.Fill(Me.Database1DataSet.LogInTable)
    
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim myConn As SqlConnection
            myConn = New SqlConnection("Initial Catalog=OutComes; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30")
    
    
    
            'Create a Command object.
            Dim myCmd As SqlCommand
            myCmd = myConn.CreateCommand
            myCmd.CommandText = "SELECT UserID, Password FROM LogInTable"
    
            'Open the connection.
            myConn.Open()
    
            Dim results As String
            Dim myReader As SqlDataReader
            myReader = myCmd.ExecuteReader()
    
            'Traverse the DataSet and Display in GUi for Example:
            Do While myReader.Read()
                results = results & myReader.GetString(0) & vbTab &
                    myReader.GetString(1) & vbLf
            Loop
            'Display results.
            MsgBox(results)
    
            ' Close the reader and the database connection.
            myReader.Close()
            myConn.Close()
        End Sub
    

    我试图注释掉加载事件并手动连接到数据库。成功了:)

    Imports System.Data.SqlClient
    
    
    Public Class Form1
    
    
        'Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '    'TODO: This line of code loads data into the 'Database1DataSet.LogInTable' table. You can move, or remove it, as needed.
        '    Me.LogInTableTableAdapter.Fill(Me.Database1DataSet.LogInTable)
    
        'End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim myConn As SqlConnection
            myConn = New SqlConnection("Initial Catalog=OutComes; Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30")
    
    
    
            'Create a Command object.
            Dim myCmd As SqlCommand
            myCmd = myConn.CreateCommand
            myCmd.CommandText = "SELECT UserID, Password FROM LogInTable"
    
            'Open the connection.
            myConn.Open()
    
            Dim results As String
            Dim myReader As SqlDataReader
            myReader = myCmd.ExecuteReader()
    
            'Traverse the DataSet and Display in GUi for Example:
            Do While myReader.Read()
                results = results & myReader.GetString(0) & vbTab &
                    myReader.GetString(1) & vbLf
            Loop
            'Display results.
            MsgBox(results)
    
            ' Close the reader and the database connection.
            myReader.Close()
            myConn.Close()
        End Sub
    End Class
    

    这很好,但我仍然想知道为什么我收到错误消息。是不是因为 datagridview tableadapter 拥有与数据库的持续打开连接。并且不能同时打开多个连接?

    【讨论】:

    • 我不确定确切的原因是否是您附加了 mdf 文件以进行连接。在我看来,对于您的新问题,您应该将其标记为已回答,并针对此新问题再发一篇文章。也许更多的人可以帮助你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多