无法在桌面应用程序中使用 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 连接
何时在连接字符串中指定 providerName="System.Data.SqlClient"