【问题标题】:Why am I receiving this error message? "An error has occurred while establishing a connection to the server"为什么我会收到此错误消息? “建立与服务器的连接时发生错误”
【发布时间】:2017-10-21 18:40:16
【问题描述】:

尝试在另一台机器上启动我的 Windows 应用程序时出现以下错误。

“发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:命名 Pipes Provider,错误:40 - 无法打开与 SQL 的连接 服务器)。”

在我的机器上,该应用程序正在运行,但在用户的机器上却无法运行。无论是在 stackoverflow 还是其他网站中,我都尝试了很多解决方案,但没有一个能帮助我解决这个问题。数据库是本地的,所以我没有使用任何服务器或类似的东西。奇怪的是,登录表单实际上正在工作,但其他表单不起作用。这是来自无法使想法更接近的一种形式的代码。我希望你能帮助我解决这个问题,因为我真的没时间了。我正在使用 VB.NET 和 SQL SERVER。

Imports System.Data
Imports System.Data.SqlClient

Public Class Form13
    'Dim cmd As New SqlCommand
    Dim cn As New SqlConnection("database=Leave_manager;server=(local);integrated security=true")
    Private Sub Form13_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: cette ligne de code charge les données dans la table 'Leave_managerDataSet1.Addemployees'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
        Me.AddemployeesTableAdapter.Fill(Me.Leave_managerDataSet1.Addemployees)
    End Sub
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Try
            cn.Open()
            Dim sqlcmd As New SqlCommand("select Fname,Lname from Addemployees where ID = '" & ComboBox1.Text & "'", cn)
            Dim myreader As SqlDataReader
            myreader = sqlcmd.ExecuteReader()
            myreader.Read()
            If myreader.HasRows Then
                TextBox2.Text = myreader.Item("Fname").ToString
                TextBox1.Text = myreader.Item("Lname").ToString
            End If
            cn.Close()
        Catch ex As Exception
            MessageBox.Show("Error while connecting to SQL Server." & ex.Message)
        Finally
            cn.Close()
        End Try
        Try
            cn.Open()
            Dim sqlcmd As New SqlCommand("SELECT Leave_num FROM Addemployees WHERE ID='" & ComboBox1.Text & "'", cn)
            Dim myreader1 As SqlDataReader
            myreader1 = sqlcmd.ExecuteReader()
            myreader1.Read()
            If myreader1.HasRows Then
                TextBox6.Text = myreader1.Item("Leave_num").ToString
            End If
            cn.Close()
        Catch
            MessageBox.Show("Error!", "exit", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    TextBox1.Clear()
    TextBox2.Clear()
    TextBox3.Clear()
    TextBox4.Clear()
    TextBox6.Clear()
    Me.CheckBox1.Checked = False
    Me.Hide()
    Form6.Show()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If MessageBox.Show("Do you really want to Restore is record?", "Record", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
        Try
            cn.Open()
            Dim cmd As New System.Data.SqlClient.SqlCommand
            Dim RA As Integer
            cmd = New SqlCommand("update Addemployees set Leave_num ='" & TextBox3.Text & "'  where ID='" & ComboBox1.Text & "' ", cn)
            cmd.Connection = cn
            RA = cmd.ExecuteNonQuery()
            MessageBox.Show("Process successful!", "Save", MessageBoxButtons.OK, MessageBoxIcon.Information)
            cn.Close()
        Catch
            MessageBox.Show("Error!", "exit", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    If MessageBox.Show("Do you really want to Restore all records?", "Record", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
        If Me.TextBox4.ReadOnly = False Then
            Try
                cn.Open()
                Dim cmd2 As New System.Data.SqlClient.SqlCommand
                Dim Rb As Integer
                cmd2 = New SqlCommand("update Addemployees set Leave_num ='" & TextBox4.Text & "'", cn)
                cmd2.Connection = cn
                Rb = cmd2.ExecuteNonQuery()
                MessageBox.Show("Process successful!", "Save", MessageBoxButtons.OK, MessageBoxIcon.Information)
                cn.Close()
            Catch
                MessageBox.Show("Error!", "exit", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        ElseIf Me.TextBox4.ReadOnly = True Then
            MessageBox.Show("Error!, please select selectr all option", "exit", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End If
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    TextBox1.Clear()
    TextBox2.Clear()
    TextBox3.Clear()
    TextBox4.Clear()
    TextBox6.Clear()
    Me.CheckBox1.Checked = False

End Sub

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    If Me.CheckBox1.Checked = True Then
        Me.TextBox4.ReadOnly = False
    ElseIf Me.CheckBox1.Checked = False Then
        Me.TextBox4.ReadOnly = True
    End If
End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

结束类`

【问题讨论】:

  • 你需要对sql连接字符串持怀疑态度。错误在连接中,并且与连接字符串有关(假设 SQL 可用并且您似乎已经证明了连接。)
  • 是的,我在这个阶段完全迷失了。我该怎么办
  • @OuallaWalid 我们无法从这里猜测,但是您必须检查您的 sql 连接字符串,还要检查服务器是否正在运行。
  • 我已经检查了很多次连接字符串以及服务器,但一切都是正确的
  • 我建议您创建一个新表单,只需精简到连接到 SQL 所需的内容,以证明其有效或使其正常工作。然后从那里构建。如果需要,从工作表单中的连接代码开始。这可能会突出正在发生的事情。

标签: sql-server vb.net


【解决方案1】:
  1. 错误 - “(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)”指出 SQL Server 部分的配置错误。请检查并确保服务器接受通过命名管道的连接。
  2. “在我的机器上,应用程序正在运行,但在用户的机器上却无法运行。” .......a) 请检查防火墙是否可以访问端口 1433(或任何其他定义的端口), b) 请转到用户机器上的服务,重新启动“SQL Server” c) 在服务本身中,如果需要,重新启动“Windows 防火墙”。
  3. “当用户输入密码和用户名时,应用程序正常工作,他移至出现问题的下一个表单。”..似乎您的每个表单都需要身份验证。
  4. 我建议你从用户机器上取下数据库,移到你的机器上,提供对用户机器的访问权限并从用户机器上测试。您需要创建一个 SQL 服务器用户(而不是作为远程机器的 windows 用户)并对其进行测试。我相信这应该可以解决数据库连接问题。

【讨论】:

  • 非常感谢,这对我很有帮助,最后一个对我有用
【解决方案2】:

取决于您的 sqlserver 版本。 检查您的服务器名称只需打开 cmd 并输入SQLCMD -L。 检查您的服务器实例名称sqllocaldb i。

在 sql server express 2012 中,实例名称通常为(LocalDB)\v11.0。

【讨论】:

  • 非常感谢您的帮助和支持
猜你喜欢
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 2015-01-25
  • 1970-01-01
相关资源
最近更新 更多