【发布时间】:2021-08-31 02:29:33
【问题描述】:
这让我很困惑。我正在尝试运行几行代码来连接到我们的 SQL Server 数据库,就像我以前做过很多次一样。在这个项目中,它只是失败了。如果我启动一个新的准系统 WPF (.net 4.8) 项目,以下代码可以完美运行。
SqlConnection cn = new SqlConnection("Data Source = SRVSQL03; Initial Catalog = PRODDATA; Persist Security Info = True; User ID = XXX; Password = XXX; TrustServerCertificate = True");
cn.Open();
var cmd = new SqlCommand("select top (1) name from Employee where active = 1 and EmployeeCode = @id", cn);
cmd.Parameters.AddWithValue("@id", int.Parse(Input));
cmd.CommandType = CommandType.Text;
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (dr.Read())
{
Console.WriteLine(dr[0]);
}
cn.Open() 超时:
发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:命名 Pipes Provider,错误:40 - 无法打开与 SQL Server 的连接)
清理/重建解决方案让我无处可去。我在想也许参考可能会在某处造成麻烦或一些碎片。也尝试删除并重建 obj 文件夹。
提前致谢
【问题讨论】:
-
问题出在连接字符串上。最好的调试方法是使用 SQL Server Management Studio,它提供比 c# 更好的错误消息。似乎服务实例错误或凭据错误。检查数据源并查看它是否适用于 SSMS。如果您使用的是用户名和密码,则将凭据设置为 SQL Server;如果您使用的是 Integrated Security = true,请将其设置为 Windows 凭据。
-
连接字符串工作正常。显然改变了UN/PW。在我创建的虚拟解决方案中尝试了相同的字符串。甚至尝试了其他也应该工作的字符串。在并行项目中工作正常。我会说排除了可能存在的各种防火墙/SQL服务器设置问题,并将其减少到......我的解决方案本身存在冲突/损坏的部分,不是吗?
-
您是否在相同的两台机器之间运行并正常工作?在 VS 之外运行可执行文件时代码是否有效?如果您是管理员,VS 会自动使用 AS ADMIN 运行。您必须右键单击 VS 快捷方式并选择以管理员身份运行。我怀疑当您运行不同的应用程序时,您并没有在 VS 中运行。当你失败时,你就在 VS 里面。
-
同一台机器上的两个 VS 实例针对我们托管 SQL DB 的服务器运行。一个有效,另一个无效。我的主要自动取款机。是否包括 WinRT api(用于 pdf 查看器)正在破坏它。不知何故。如果我将解决方案分解为该子项目并尝试从那里注入我的 SQL,至少我会得到相同的错误。
-
也许您在某处有某种代理设置?顺便说一句,您应该使用
using块处理您的 SQL 对象
标签: c# sql-server wpf