SQL Server连接问题 - 我可以连接,但其他用户不能

时间:2014-06-13 13:36:36

标签: c# sql sql-server wpf

[编辑]所以不确定发生了什么,但我们最终重置服务器并关闭/打开TCP / IP和命名管道,并在重新启动和更新设置后,一切都开始工作了。最奇怪的事情。无论如何,谢谢你的帮助。

我正在为我的工作构建一个C#WPF应用程序,并且我遇到了一个奇怪的问题,我过去一周一直想弄清楚。应用程序连接到服务器并在启动时导入多个表。所以我构建了它并且没有任何问题进行测试,但当我将它传递给我们的测试人员时,每个人都会遇到以下错误:

  

提供程序:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接

用户可以通过其他方法(SSMS / Excel VBA)连接到服务器,但只是通过应用程序它将无法正常工作。

我检查了以下内容:

  1. 启用远程连接
  2. 启用TCP / IP连接
  3. 所有用户(包括我)的防火墙设置完全相同
  4. 应用程序编译为32位(在另一个线程中看到)
  5. 我们正在使用SQL Server 2008,并且我尝试了几种连接字符串/方法。

    下面是我用来连接的代码:

     public void Open_DB_Conn(string Connection_Str)
     {
            try
            {
                Sql_Conn = new SqlConnection(Conn_Str);
                Sql_Conn.Open();
            }
            catch (Exception e)
            {
                MessageBox.Show(string.Format("Error Message:{0} Conn String: {1}",e.Message,Conn_Str));
            }
        }
    

    下面是我的连接字符串(这只是我尝试使其工作的许多迭代中的一个):

    Data Source=IP Address;Initial Catalog=DB_Name;User ID=LOGIN;Password=PWD
    

    任何人都知道为什么我会成为唯一一个能够让它工作并且用户能够使用其他应用程序无问题地登录服务器的人?他们使用它来记录他们的excel VBA脚本,那里没有任何问题。

6 个答案:

答案 0 :(得分:0)

你必须配置你的SQl服务器,以便其他IP可以连接它,你必须通过提到的链接

Configure SQL server

答案 1 :(得分:0)

您对SQL Server使用了哪些身份验证? Windows身份验证或SQL Server身份验证?我的建议是首先启用SQL Server身份验证并使用sa \ password连接到服务器。如果您成功,请询问其他人(您的应用程序的用户)尝试使用相同的连接字符串。让我知道你发现了什么。

答案 2 :(得分:0)

确保在

中指定的端口
Data Source="IPAddress,port";Initial Catalog=DB_Name;User ID=LOGIN;Password=PWD

匹配SQL Server上的端口。您可以通过访问SQL Server配置管理器并查看TCP / IP属性来检查它。

编辑:

由外部防火墙阻止定义的端口也是如此。其余应用程序使用其他端口。尝试找出您可以使用的端口(如果确实是对您的网络的限制)

答案 3 :(得分:0)

确保您的SQL Server实例已正确配置为使用Sql Server配置管理器使用TCP。

默认情况下,它在SQL Express中禁用,如下所示。

enter image description here

答案 4 :(得分:0)

我想了解更多有关“Sql_Conn”课程的信息。

另外,请尝试使用此连接。

using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    conn.Open();

    using (var cmd = conn.CreateCommand())
    {
        string cmdText = "SELECT name FROM sys.tables"


        cmd.CommandText = cmdText;

        cmd.ExecuteNonQuery();
    }
}

答案 5 :(得分:0)

试试这个 - 这可能是你的答案

"客户端库报告错误。当您的服务器正在侦听远程TCP时,客户端仍将按顺序尝试TCP和NP连接。所以错误的客户端行为是预期的。根据您的描述,我相信即使您在XPSP2计算机上启用了远程TCP连接,您也没有将TCP侦听端口作为XPSP2个人防火墙的例外。您应该按照以下步骤解决此问题。

  1. 检查SQL Server错误日志以确保SQL Server正在侦听TCP / IP并确认它正在侦听哪个端口。通常是1433.在Errorlog中,您将看到几行讨论SQL Server正在侦听的内容。以下是一个例子:

    2006-01-04 01:41:07.65服务器监听10.254.1.150:1433的SQL服务器。< - 显示IP地址和端口。

    2006-01-04 01:41:07.65服务器侦听127.0.0.1:1433的SQL服务器。< - 显示另一个IP地址和端口。

    2006-01-04 01:41:07.69服务器SQL服务器侦听TCP,共享内存,命名管道。

    2006-01-04 01:41:07.69服务器SQL Server已准备好进行客户端连接

  2. 2,确保在Windows XP上防火墙没有阻止该端口。

    3,转到客户端计算机并运行客户端网络配置工具(cliconfg.exe)确保已启用TCP / IP,单击属性并确保端口号与SQL Server正在侦听的端口号相同。在这里,您也可以启用NP或禁用客户端NP。

    一旦客户端和服务器都使用具有相同端口号的TCP / IP并且服务器计算机上的防火墙未被阻止,您就应该能够连接。

    希望这会有所帮助。"

    (参考:http://social.technet.microsoft.com/Forums/sqlserver/en-US/c488cf76-2515-440f-b3f8-9cfad689c5b6/named-pipes-provider-error-40-could-not-open-a-connection-to-sql-server?forum=sqldataaccess