无法在桌面应用程序中使用 SqlClient 连接到 SQL Server

Posted

技术标签:

【中文标题】无法在桌面应用程序中使用 SqlClient 连接到 SQL Server【英文标题】:Cannot connect to SQL Server using SqlClient in a desktop application 【发布时间】:2017-07-06 04:06:11 【问题描述】:

使用 SQL 用户名和密码连接到 SQL Server 完全没有问题。 这些场景工作得很好:

来自在 ASP.NET / MVC 中使用 SqlClient 的 C# 代码 使用 ssms 使用 Visual Studio 连接属性向导

例如,这适用于 MVC 项目:

new SqlConnection("Server=DB1;Database=testdb;User Id=testuser;Password=testuser1;").Open();

但是这个相同的代码在桌面应用程序项目中运行时会失败。它会导致以下内部异常错误:

用户名或密码不正确

(是的,用户名和用户名之间有空格)

我试过了:

确保 SQL 配置管理器中的协议正确。 在客户端和服务器的防火墙中打开端口。 连接到另一个数据库以查看它是否是数据库而不是客户端。 SqlClient 的 NuGet 版本。 重新启动开发机器和服务器。 确保浏览器 SQL 服务正在运行。 确保主 SQL 服务设置为自动并正在运行。 SqlClient、OLEDB 和 ODBC 以及相应的连接字符串。 将用户名和密码存储在单独的凭据对象中。 在连接字符串中指定 Integrated Security=False

但还是什么都没有。

为什么我可以从桌面 .NET 应用程序中运行的代码中的所有除了连接到 SQL Server?在连接发生之前,是否有什么东西在删除我的密码?

【问题讨论】:

桌面应用程序在哪里运行?你能从那台机器上运行 ssms 吗? 这真的很奇怪。您可以尝试放置一个分析器并检查Audit Login Failed Event information吗? 我可以看到的一件事(可能不是问题,但是...)是:您的桌面上是否安装了 SQL Server(您正在从中运行应用程序),如果是,是否可能会混淆名称并尝试连接到本地 SQL 服务器而不是专用服务器? 您运行的是 32/64 位吗?框架版本有区别吗? 桌面应用安装在开发机器上? SQL Server 在哪里?如果可以,请创建临时登录名、用户名,并使用临时凭据告诉我们域或 IP 地址,以便我们尝试连接我们自己的桌面应用程序(如 WPF)。 【参考方案1】:

让我们试试吧:

data source=DB1;initial catalog=testdb;persist security info=True;user id=testuser;password=testuser1;

用户必须是 SQL 用户。

【讨论】:

以上是关于无法在桌面应用程序中使用 SqlClient 连接到 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions 运行时 2 - 使用 SqlClient 的 SQL 连接

win10远程桌面无法连接怎么办?

何时在连接字符串中指定 providerName="System.Data.SqlClient"

Windows 2008 R2无法连接远程桌面怎么办

SqlClient/OLEDB 驱动程序的连接字符串,如 jdbc:jtds 驱动程序?

手机zoom无法连接啥原因