2011-11-05 302 views
1

我在SQL Server 2008上有一個數據庫,並試圖在Visual Basic 2010上運行代碼來連接它。我有以下的代碼,但我得到的錯誤A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)上線SQLConn.Open()VB2010:連接到SQL Server 2008

Imports System.Data 
Imports System.Data.SqlClient 

Public Class Form1 

    Dim SQLConn As SqlClient.SqlConnection 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     Dim i As Integer 
     Dim connectionstring As String 
     connectionstring = "Data Source=MySQLServer\MyInstance;Database=MyDatabase;Integrated Security=true;" 

     Try 
      SQLConn = New SqlConnection(connectionstring) 
      SQLConn.Open() 
     Catch ex As Exception 
      MsgBox(ex.Message & " Error Connecting to database!", MsgBoxStyle.Critical) 
      Exit Sub 
     End Try 
     Dim da As SqlDataAdapter 
     da = New SqlDataAdapter("SELECT * from DR_Users", SQLConn) 
     Dim dt As DataTable 
     da.Fill(dt) 
     For i = 0 To dt.Rows.Count - 1 
      Dim dr As DataRow = dt.Rows(i) 
      Debug.Print(dr.Item("UserId").ToString) 
     Next 

    End Sub 
End Class 

編輯:我一直在努力VBA代碼,並知道服務器\實例和數據庫名稱是否正確。不知道爲什麼它不VB.NET下工作2010

+0

我通過同事一直在研究的VB.NET 2010解決方案進行復制。我在他的電腦上測試過,效果很好。我有權訪問他的SQL Server 2008數據庫,並在第一個TableAdapter.Fill語句中獲得相同的錯誤消息。 我可以通過數據源窗格連接並在設計模式下預覽記錄沒有問題,但一旦它符合它顯然不能。 我應該做一個乾淨的Visual Studio旗艦版安裝還是有補丁/修補程序? – Rick

+0

我已經運行了Visual Studio 2010卸載工具並重新安裝,但仍然收到相同的消息。 – Rick

回答

0

可能的原因:

1)數據庫服務器的名稱不是MySQLServer。如果它是您的本地機器,請將其更改爲。或(本地)或您的機器名稱。

2)SQL Server未在實例中運行,或者實例未命名爲MyInstance。

3)SQL Server服務並未實際運行。嘗試啓動它。

4)SQL Server與您正在運行此代碼的計算機之間由不允許SQL通信通過的防火牆分開。

更新:

5)本地SQL Server客戶端網絡實用程序或者沒有配置爲支持SQL Server會或有一個古老的別名,指向了錯誤的機器或地址的協議。要打開此實用程序,可以從Run ...提示符或命令行運行cliconfg。

更新2:

This blog entry具有完全是一個優秀的解釋如何解決這一具體問題。

+0

我有多次使用VBA代碼(ADO)連接到我的SQL Server 2008 R2。我確信SQL服務器名稱\實例和數據庫。不知道爲什麼它不會讓我連接Visual Basic 2010.服務器已啓動並正在運行,並且可以通過Microsoft SQL Server Management Studio進行連接。 – Rick

+0

更新的答案和其他想法。 –

+0

我的防火牆已關閉,我試圖連接到我知道工作的網絡上的不同SQL Server,並且可以連接除VB.NET提供的代碼之外的任何其他方法。 – Rick

1

第一步是安裝「SQL Server管理工作室」。如果你可以連接到你的SQL服務器,你知道服務器是可訪問的。否則,你需要修復的防火牆,啓動SQL Server等..

關於連接字符串: 我喜歡「打造」它即時,也許,你的作品,也

Public Property ServerName() As String 
    Public Property DatabaseName() As String 
    Public Property Login() As String 
    Public Property Password() As String 

    Private Function SqlConn(Optional timeout As Integer = 0) As String 
    ' Initialize the connection string builder for the 
    ' underlying provider. 
    Dim sqlBuilder As New SqlClient.SqlConnectionStringBuilder() 

    ' Set the properties for the data source. 
    sqlBuilder.DataSource = _serverName 
    sqlBuilder.InitialCatalog = _databaseName 
    sqlBuilder.IntegratedSecurity = False 
    sqlBuilder.MultipleActiveResultSets = True 'to avoid exception if a query uses anothe rquery internal 

    sqlBuilder.UserID = _Login 
    sqlBuilder.Password = _Password 
    If timeout > 0 Then 
     sqlBuilder.ConnectTimeout = timeout 
    End If 

    Return sqlBuilder.ToString 
    End Function 

所以你可以寫

Using sqlConn As New SqlClient.SqlConnection(sqlConnString) 
    sqlConn.Open() 
     [...] 
    sqlConn.Close() 
End Using 

服務器名稱,使用與合作,與Server Management Studio中,用相同的登錄名和密碼連接到該名稱。數據庫=連接時可以看到的數據庫。

如果您使用Windows憑據,則可以保留使用IntegratedSecurity。但我認爲對於程序來說,更獨立一些更有意義,所以只需設置一個普通的sql登錄。

+0

Windows>混合模式身份驗證,因爲大多數人通常忘記更改SA密碼和/或完全禁用帳戶。 –

+0

我有一個單獨的SQL Server 2008,並且可以使用VBA代碼正常連接。我已啓用集成安全性。嘗試使用SQLConnection字符串生成器,但得到相同的錯誤 – Rick

+0

我對VBA沒有多少經驗,但它看起來像VBA和VB.Net之間的連接字符串不同,你可以嘗試[另一種方式](http://geekswithblogs.net /darrengosbell/archive/2006/11/05/96166.aspx)創建一個連接字符串並測試它是否以這種方式工作 – Amegon