C# 无法从UWP应用程序连接到SQL Server Express数据库

C# 无法从UWP应用程序连接到SQL Server Express数据库,c#,sql-server,xaml,uwp,uwp-xaml,C#,Sql Server,Xaml,Uwp,Uwp Xaml,我有一个UWP应用程序,需要连接到SQL Server Express数据库。在我的开发盒上,我没有任何问题 在客户端PC上,我安装了SQL Server Express,创建了数据库,设置了用户和登录名 当我运行应用程序并尝试连接到数据库时,我收到一个错误: 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:TCP提供程序,错误:40-无法打开到SQL Serv

我有一个UWP应用程序,需要连接到SQL Server Express数据库。在我的开发盒上,我没有任何问题

在客户端PC上,我安装了SQL Server Express,创建了数据库,设置了用户和登录名

当我运行应用程序并尝试连接到数据库时,我收到一个错误:

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。
找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。
(提供程序:TCP提供程序,错误:40-无法打开到SQL Server的连接)

我用来连接的代码是:

...
using (SqlConnection connection = new SqlConnection(ConnectionStringTextBox.Text.Trim()))
{
    try
    {
        connection.Open();
        MessageBox.Show("Connected successfully!");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
...
在客户端计算机的桌面应用程序上使用相同的代码,连接成功

我已将UWP应用程序设置为使用Windows10的1809版本

客户端和my dev box都是版本2004

Package.appxmanifest
文件已检查以下功能:

  • 企业认证
  • 互联网(客户端和服务器)
  • 互联网(客户端)
  • 专用网络(客户端和服务器)
Windows防火墙打开了正确的端口。在SSMS中,我启用了允许远程连接,启用了TCP

我不知道我做错了什么或出了什么问题。同样的UWP应用程序在我的dev box上非常有效


非常感谢您的建议。

如果您试图连接到同一台计算机上的SQL Server实例,它将无法工作,因为-而连接到远程计算机将成功。我认为这很愚蠢,但这是故意的

作为一种解决方法,您可以将SQL Server配置为使用共享内存或命名管道,这些方法应该可以工作

更新:
我忘记了(仅适用于TCP)。

您可以在uwp应用程序中尝试此示例,了解如何连接到sql server,并尝试在您的客户端pc上执行相同的步骤,希望它能起作用:

我尝试了所有我能在网上找到的东西,更改sql server防火墙设置、sql server tcp/ip设置、更改sql server浏览器防火墙设置,但这些都不适用于我

我确实读到有人说在UWP中启用环回功能,但我没有看到针对我的目标窗口版本的选项。最后,通过运行以下命令,我终于让它工作了

checknetisolation loopbackexempt -a -n=YourAppPackageName

那么,您是否调试/打印/msgbox存储在
ConnectionStringTextBox.Text.Trim()中的值
?价值是什么?当您尝试从运行UWP应用程序的同一台计算机上的SSMS连接到该服务器/实例名称时,会发生什么情况?提示:这可能与应用程序无关,当然不是Windows版本。您看到了吗?我需要查看连接字符串。您需要使用integratedsecurity=true,它使用Windows凭据。首先在客户端计算机上使用SQLServerManagementStudio连接到数据库,以确保凭据正常工作。除非第一个SSM工作,否则您的c#代码将无法工作。那么一旦你让SSM工作起来,c#就很容易了。集成安全性要求本地和远程计算机上的凭据相同。因此,您需要将客户端和服务器放在同一组中,以使windows凭据正常工作。用户需要同时位于客户端和服务器计算机中。我通常创建windows用户组。@jdweng OP不必使用集成安全性。我不知道你是从哪里得到这个主意的。我同意这更方便,意味着我们可以避免密码,但在受控的AD域环境之外,或者在通过Internet连接到SQL Server时(这很愚蠢,但有时是必要的)您必须使用登录+密码身份验证。当SQL Server位于远程计算机上时,登录/密码可能不起作用。您的意思是它们只能连接到本地主机吗?如果他们可以连接到除localhost之外的任何东西,那就有点像沙箱的反面,如果是这样,我同意你的看法-那太愚蠢了。@AaronBertrand正确,他们可以连接到除
localhost
之外的任何东西。争论的焦点是,用户的计算机可能正在运行编写糟糕的非UWP程序,这些程序有可能被恶意UWP应用程序利用的本地环回服务器(因为微软出于某种原因预计UWP将像web应用程序一样普及,并希望以可用性为代价,先发制人地使平台超级安全——愚蠢的IMO)。