c# - UWP 应用程序无法与远程实例 SQL Server 通信
问题描述
我目前正在为现有数据库实施 UWP 程序。我以这篇文章为基础。 https://docs.microsoft.com/en-us/windows/uwp/data-access/sql-server-databases
运行时出现异常:
System.Data.SqlClient.SqlException" в System.Data.SqlClient.dll
异常:
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP 提供者,错误:25 - 连接字符串无效)
这对我来说似乎很奇怪,因为具有相同连接字符串的 WPF 应用程序可以正常工作。接下来,我决定在我的电脑上安装一个数据库实例,并将部分数据导出到本地数据库。令我惊讶的是,从以下位置替换连接字符串后:
Data Source=sqlserver\sqlexpress
至
Data Source=.\sqlexpress
UWP 程序从我计算机上的数据库中读取此内容。
我还阅读了这篇文章以确保远程数据库配置正确。https://www.lansweeper.com/knowledgebase/a-network-related-or-instance-specific-error-occurred/
正如我所说,WPF 程序可以完美地使用这个数据库。有什么方法可以检查为什么 UWP 不想与数据库通信?
为了明确远程服务器原则上是否可用,我应用了 TNC 命令的输出:
tnc sqlserver -p 1433 -I detailed
ComputerName : sqlserver
RemoteAddress : 192.168.10.11
RemotePort : 1433
NameResolutionResults : 192.168.10.11
MatchingIPsecRules :
NetworkIsolationContext : Private Network
InterfaceAlias : Ethernet
SourceAddress : 192.168.10.20
NetRoute (NextHop) : 0.0.0.0
TcpTestSucceeded : True
连接字符串如下所示:
private string connectionString = @"Data Source=sqlserver\sqlexpress;Initial Catalog=TestCatalog;User ID=*;Password=*";
在 VS 中使用相同的连接字符串。VS 显示表格的内容没有问题。我还可以在 VS 编辑器中删除或添加新行。
我说的是远程数据库。在 VS 服务器资源管理器中,我有一个连接到远程数据库的数据连接。我可以在 VS 中安全地编辑远程数据库数据(添加、删除和更新)。我看到了连接字符串,最初将其用作 UWP 应用程序中的连接字符串。
解决方案
您已经在此处查看了此 Microsoft 链接。长话短说,您是否遵循以下建议?
无法连接到您的数据库? 在大多数情况下,需要更改 SQL Server 配置的某些方面。如果您能够从其他类型的桌面应用程序(例如 Windows 窗体或 WPF 应用程序)连接到您的数据库,请确保您已为 SQL Server 启用 TCP/IP。您可以在计算机管理控制台中执行此操作。
检查您是否正确遵循了解决方案的其余部分。您可能需要从窗口防火墙启用 tcp 端口。
转到防火墙 -> 入站规则 -> 在规则中添加 TCP:1433。
此外,由于错误与连接字符串有关,因此请尝试仅使用服务器名称/ ip/ 或主机名,而不使用服务器实例。
您还可以添加端口号,看看这是否适合您。添加时,sql server 会忽略实例名称(因为不同的实例需要不同的端口才能工作,所以它可以作为唯一标识符工作)。
编辑:如何创建有效的连接字符串:
在此处查看此答案:如何从数据库中获取连接字符串
推荐阅读
- flutter - 如何仅在没有背景的图像内部绘画
- php - 我正在使用带有响应式文件管理器的 TinyMCE,代码是用 PHP 编写的,但它给出了 500 个内部服务器错误
- c++ - 我得到的 std 类向量对我的所有向量方法都没有成员错误
- java - 如何创建只有特定 IP 可以连接的服务器套接字
- postgresql - 使用 REFERENCES 在表中复制树的分支
- arrays - 将 HSTORE 数组值转换为 JSONB 中的列
- r - 数据框每一行的条形图成对
- alexa-presentation-language - Alexa 模拟器中的 OpenUrl 命令
- python - Pandas groupby 基于列值
- mysql - MySQL:检查一个表中的列数与第二个表的列中的值