2016-01-08 212 views
4

使用Visual Studio,我無法連接到SQL Server。我認爲這是Visual Studio專用的東西,而不是服務器本身。 VS在筆記本電腦(工作站)上,服務器在另一個子網上。版本會在標題中列出,我已經考慮下面的解決方案:Visual Studio 2013連接到SQL Server 2014

Visual Studio 2013 incompatibility with MS SQL Server 2014

  • 我的連接字符串中PowerShell的工作沒有問題。
  • 與服務器瀏覽器連接時,我的連接在Visual Studio中工作。
  • 連接在C#代碼中不起作用,我已經將它剝離到基本的控制檯項目,儘可能變得基本。
  • 我已經嘗試了所有可能在論壇中找到的連接字符串的迭代。 (我現在已經到了30多個論壇,很容易)
  • 我已經嘗試了SQL Server身份驗證和Windows身份驗證。這兩種形式均可在PowerShell和Visual Studio Server Explorer中使用。

請不要將其標記爲無關緊要,因爲這與C#和NOT SQL有關。 服務器爲遠程訪問和連接類型正確設置。

using System; 
using System.Data.SqlClient; 

namespace ConsoleApplication2 { 
    class Program { 
     static void Main(string[] args) { 
      System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(); 
      builder.DataSource   = "SERVERNAME"; 
      builder.InitialCatalog  = "DATABASE"; 
      builder.IntegratedSecurity = true; 
      Console.WriteLine(builder.ConnectionString); 
      SqlConnection conn = new SqlConnection(builder.ConnectionString); 
      conn.Open(); 
      Console.WriteLine(conn.State); 
     } 
    } 
} 

在PowerShell中,此代碼工作在同一臺機器上。

$dataSource     = "SERVERNAME" 
$database     = "DATABASE" 
$connectionString   = "Server = $dataSource; Database = $database; Integrated Security = $TRUE;" 
$connection     = New-Object System.Data.SqlClient.SqlConnection 
$connection.ConnectionString = $connectionString 
$connection.Open() 
Write-Host $connection.State 
+4

就像你沒有發佈代碼的原因一樣好,你發佈它比發佈它更容易,而不是我們沒有它的幫助。 –

+0

您是否測試過不同的SQL Server?如果沒有,您可以嘗試創建一個新的簡單實例並連接到該實例。 –

+2

如果您不想發佈代碼,請至少告訴我們錯誤消息。它沒有調試運行? – etalon11

回答

-1

下面的堆棧溢出文章解決了我的特殊解決方案。我相信別人可能有其他許多其他原因,也許我在這個帖子中嘗試併發布的步驟可能導致了這個最後時刻。然而,當我發現SQL Server配置管理器>> SQL Server網絡配置>> MSSQLSERVER >>命名管道協議被禁用時,問題立即解決。我啓用了此功能,然後重新啓動了所有SQL服務,並立即解決問題。爲什麼這在PowerShell,SSMS和Visual Studio數據連接和服務器中有效 - 但與C#連接不在我身上。我想這只是其中的一個謎團,但至少已經解決了。我希望這篇文章提供了一個很好的收集有用的步驟來解決這個問題,感謝大家的幫助(隱式或其他)。

How do I fix the error 'Named Pipes Provider, error 40 - Could not open a connection to' SQL Server'?

1

您應該始終使用ConnectionStringBuilder來創建您的連接字符串。這確保了有效的語法和避免惡意注射:

System.Data.SqlClient.SqlConnectionStringBuilder builder = 
    new System.Data.SqlClient.SqlConnectionStringBuilder(); 
builder.DataSource = "SERVERNAME"; 
builder.IntegratedSecurity = true; 
builder.InitialCatalog = "DATABASE"; 
builder.UserID = "userid"; 
builder.Password = "password"; 
Console.WriteLine(builder.ConnectionString); 

對於你的榜樣,這將產生以下輸出:

Data Source=SERVERNAME;Initial Catalog=DATABASE;Integrated Security=True;User ID=userid;Password=password

請注意,Integrated Security=True;表明您要使用當前的Windows帳戶認證憑證;用戶名和密碼在這種情況下是不必要的。

來源:https://msdn.microsoft.com/en-us/library/ms254947%28v=vs.110%29.aspx

+0

這是你指出的一個可愛的小片段,但它仍然不能解決問題。 附加信息:建立到SQL Server的連接時發生網絡相關或實例特定的錯誤。服務器未找到或無法訪問。驗證實例名稱是否正確,並將SQL Server配置爲允許遠程連接。 (提供程序:命名管道提供程序,錯誤:40 - 無法打開連接到SQL Server) –

+0

我也在輸出控制檯中得到此錯誤: System.ComponentModel.Win32Exception(0x80004005):訪問被拒絕 5 程序'[9060] ConsoleApplication2.vshost.exe'已退出,代碼爲-1(0xffffffff)。 –

+0

這兩個錯誤都很有趣,因爲(A)Visual Studio在數據連接和服務器中都連接到此服務器,並且(B)我已驗證我可以訪問我的AD帳戶和我想要的服務帳戶使用。 –

0

好你coud試試這個,請注意,當你正在寫的連接字符串,它使用了兩個「//」,我想這不會是一個問題,這樣你coud使用AppConfig的或只是在創建一個類的字符串,並宣佈該連接如串...

首先創建一個類:

public static class Connetion_string 
    { 
     public static string conection = "Server=.\\Server_name;Initial Catalog=Data_base_name;Integrated Security=True"; 
    } 

然後,你可以寫這樣的事情...

 public void Some_procedure() 
    { 
     SqlConnection con = new SqlConnection(Conection_string.conection); 
     try 
      { 
       con.Open(); 
       //Here the code to execute soomething from data base.... 
       con.Close(); 
      } 
      catch (Exception ex) 
      { 
       string ms; 
       ms = ex.Message; 
      } 
      //This will ensure that al resources in server are available 
      finally 
      { 
       con.Close(); 
      } 
    } 
相關問題