【发布时间】:2020-11-17 09:18:33
【问题描述】:
我有一个需要连接到 SQL Server Express 数据库的 UWP 应用。在我的开发盒上,我没有任何问题。
在客户端 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 应用设置为使用版本 1809 的 Windows 10。
客户端和我的开发盒都是2004版。
Package.appxmanifest 文件已检查以下功能:
- 企业认证
- 互联网(客户端和服务器)
- 互联网(客户端)
- 专用网络(客户端和服务器)
Windows 防火墙打开了正确的端口。在 SSMS 中,我启用了允许远程连接,启用了 TCP。
我不知道自己做错了什么或出了什么问题。同样的 UWP 应用在我的开发盒上运行良好。
感谢任何建议。
【问题讨论】:
-
那么,您是否调试/打印/msgbox 存储在
ConnectionStringTextBox.Text.Trim()中的值?价值是什么?当您尝试在运行 UWP 应用的同一台计算机上从 SSMS 连接到该服务器/实例名称时会发生什么?提示:这可能与应用程序无关,当然也与 Windows 版本无关。 -
我需要查看连接字符串。您需要使用使用 Windows 凭据的 Integrated Security = true。首先在客户端机器上使用 SQL Server Management Studio 连接到数据库以确保凭据有效。除非第一个 SSMS 工作,否则您的 c# 代码将无法工作。然后,一旦你让 SSMS 工作,c# 将很容易。集成安全性要求本地和远程计算机上的凭据相同。因此,您需要将客户端和服务器放在同一组中才能使 Windows 凭据正常工作。用户需要同时位于客户端和服务器计算机中。我通常创建一个 windows 用户组。
-
@jdweng OP 确实不必须使用集成安全性。我不知道你从哪里得到这个想法。我同意这更方便,意味着我们可以避免使用密码,但是在受控的 AD 域环境之外或通过 Internet 连接到 SQL Server 时(这很愚蠢,但有时是必要的),您必须使用登录+密码身份验证。跨度>
-
SQL Server 位于远程计算机上时,登录名/密码可能无效。
标签: c# sql-server xaml uwp uwp-xaml