繁体   English   中英

Visual Studio 2013与SQL Server 2014的连接

[英]Visual Studio 2013 Connection to SQL Server 2014

使用Visual Studio,我无法连接到SQL Server。 我认为这是Visual Studio特有的,而不是服务器本身。 VS在笔记本电脑(工作站)上,服务器在另一个子网上。 版本列在标题中,我已经考虑过以下解决方案:

Visual Studio 2013与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

您应该始终使用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帐户凭据进行身份验证; 在这种情况下,不需要用户ID和密码。

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

好吧你可以试试这个,注意当你写连接字符串时它使用两个“//”,我认为这不会有问题,这样你就可以使用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();
            }
    }

下面的Stack Overflow文章解决了我的特殊解决方案。 我确信其他人可能有其他许多原因,也许我在这个帖子中尝试和发布的步骤可能已经导致了最后一刻。 然而,当我发现SQL Server配置管理器>> SQL Server网络配置>> MSSQLSERVER协议>>命名管道被禁用时,问题立即得到解决。 我启用了此功能,然后重新启动了所有SQL服务,问题立即得到解决。 为什么这在PowerShell,SSMS和Visual Studio数据连接和服务器中起作用 - 但是在与C#连接时不是我的。 我想这只是其中一个谜团,但至少它已经解决了。 我希望本文提供一系列有用的步骤来解决这个问题,感谢每个人的帮助(隐式和其他方面)。

如何修复错误'命名管道提供程序,错误40 - 无法打开与'SQL Server'的连接?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM