【问题标题】:How do I connect to SQL Server with VB?如何使用 VB 连接到 SQL Server?
【发布时间】:2011-02-21 00:16:18
【问题描述】:

我正在尝试从 VB 连接到 SQL 服务器。 SQL server 跨网络使用我的windows登录进行身份验证。

我可以使用以下 python 代码访问服务器:

import odbc
conn = odbc.odbc('SignInspection')
c = conn.cursor()
c.execute("SELECT * FROM list_domain")
c.fetchone()

此代码工作正常,返回 SELECT 的第一个结果。但是,我一直在尝试在 VB 中使用 SqlClient.SqlConnection,但无法连接。我尝试了几种不同的连接字符串,但这是当前代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim conn As New SqlClient.SqlConnection
    conn.ConnectionString = "data source=signinspection;initial catalog=signinspection;integrated security=SSPI"
    Try
        conn.Open()
        MessageBox.Show("Sweet Success")
        ''#Insert some code here, woo
    Catch ex As Exception
        MessageBox.Show("Failed to connect to data source.")
        MessageBox.Show(ex.ToString())
    Finally
        conn.Close()
    End Try

End Sub

它失败得很惨,它给我一个错误,上面写着“发生了与网络相关或特定于实例的错误...(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)

我相当肯定它是我的连接字符串,但我没有找到任何可靠的例子(server=mySQLServer 不是一个可靠的例子)我需要使用什么。

谢谢! -韦恩

【问题讨论】:

  • +1 用于在第一次退出时正确关闭 finally 块中的连接。你会惊讶于有多少人弄错了。

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


【解决方案1】:

您正在使用 ODBC DSN 作为 SqlClient 服务器名称。这是行不通的。您必须使用 SqlClient 连接字符串,对于 SqlClient,DataSource 属性是服务器名称或 SQL Native Client 服务器别名(与 ODBC DSN 不同)。

signinspection 替换为您的SQL Server 主机的实际名称。如果是命名实例或侦听非默认端口,您也必须指定,例如:hostname\instancename

【讨论】:

    【解决方案2】:

    查看connectionstrings.com 以获取示例。看起来在您的 python 示例中,您正在通过 ODBC 访问数据库。

    您使用的字符串与内置的 .NET SQL Server DB 提供程序连接,因此您需要使用 ODBC 连接字符串或将数据源更改为实际的服务器名称(如果没有其他实例)或服务器名称/实例名字。

    【讨论】:

      【解决方案3】:

      确定您的服务器和数据库名称相同?

      这里有一个链接,可让您生成连接字符串并对其进行测试

      http://blogs.msdn.com/dhejo_vanissery/archive/2007/09/07/One-minute-Connection-string.aspx.

      【讨论】:

      • 这很有帮助...我可能应该收藏那个链接!
      【解决方案4】:

      好吧,我继续使用 ODBC 连接。看来这就是我最初想要的。

      为了使用 ODBC,我必须访问 http://support.microsoft.com/kb/310985 并安装一些文件。按照指示,我想出了以下似乎可以正常工作的代码:

      Dim conn As OdbcConnection
      conn = New OdbcConnection("DSN=SignInspection")
      Dim mystring as String = "SELECT * FROM list_domain"
      Dim cmd As OdbcCommand = New OdbcCommand(mystring, conn)
      Dim reader As OdbcDataReader
      Dim columnCount As Integer
      Dim output As String
      Dim data as Object() = New Object(10) {}
      conn.Open()
      MsgBox("Connected!")
      reader = cmd.ExecuteReader()
      While reader.Read()
          columnCount = reader.GetValues(data)
          output = ""
          For i As Integer = 0 To columnCount - 1
              output = output & " " & data(i).ToString()
          Next
          Debug.WriteLine(output)
      End While
      conn.Close()
      

      当然我会对其进行大量清理,但我想也许有人最终会寻找相同的解决方案,并且他们可能会在花费太多时间之前看到我的代码。

      编辑。列数 -> 列数

      【讨论】:

        【解决方案5】:

        您可能想看看Microsoft Enterprise LibraryData Access Application Block,以便更轻松地连接并支持多个底层数据存储。

        好成功! =)

        【讨论】:

        • 乍一看,这些资源看起来是非常好的资源,并且符合我在这个项目上的计划。谢谢!
        • 感谢您告诉我!我很高兴我能有所作为并帮助你! =)
        • 起初我很失望 - 从您提供的链接中指向 d/l DAAB 的链接仅适用于 Windows Vista 或更高版本。然后我使用我的 Google-fu 并遇到了 DAAB for XP:microsoft.com/downloads/…"
        • EntLib 和 DAAB 有几个版本。 Enterprise Library 4.1 应该可以在 Windows XP 和 VS2008 上运行。至于EntLib 5.0,这是最新的生产版本,我还不知道它是否可以很好地兼容XP和VS2008,但我相信没有测试过。
        猜你喜欢
        • 1970-01-01
        • 2014-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-06
        相关资源
        最近更新 更多