解决 用户所需的SQL Server DLL's PC

tim8w

知名会员
已加入
2020年9月8日
留言内容
81
编程经验
10+
你好,
我已经在多个用户的PC上部署了我的程序,当程序尝试打开连接时,他们会收到以下错误,我相信:"Login filed for user"。有点奇怪的错误。由于凭据在程序中,并且从PC运行时也不会出现此错误,但是很显然,由于在PC上安装了SQL Server,因此我安装了所有正确的DLL。用户的PC需要安装哪些DLL?我们正在使用SQL Server 2014。

谢谢
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
If you are using the .NET Framework or .NET Core's SqlConnection then all that is needed to be installed on the user's machine is the .NET Framework or .NET Core. With .NET Core, 您甚至可以将应用程序独立部署,这样用户甚至不必安装.NET Core.

我建议更深入地了解导致登录失败的原因。如果有异常,请调用所有异常数据-不仅是顶级异常。某些例外情况会在初始描述文字之后加上多余的文字。此外,某些异常可能具有设置为包含更多详细信息的InnerException属性。

现在与您当前的问题相切。是的,在80年代和90年代,局域网中的人们的PC直接连接到位于同一局域网中的SQL Server是正常的。在Slammer和其他一些SQL Server问题之后,人们通常会继续使用"front office"人们的PC直接访问"back office"服务器。通常将Web服务设置为"front office"应用将访问网络服务,并且网络服务会将所需的请求中继到"back office"服务器。但是,如果您相信可以在LAN上裸访问SQL Server,那就是您的数据。

现在,另一方面,如果我们谈论的是Oracle,是的,如果使用Oracle Native Client,通常需要在用户计算机上安装许多其他DLL。如果您使用的是Oracle Managed Client,则可以仅使用与Nuget软件包一起打包并放入构建输出目录中的程序集。

我不知道MySQL或任何其他数据库的情况如何。

如果您使用的是OleDbConnection,那么,是的,您肯定需要为目标计算机上安装的所选数据库(MSSQL,Oracle,Paradox,DB2等)使用适当的OLEDB驱动程序/适配器。
 
Last edited:

tim8w

知名会员
已加入
2020年9月8日
留言内容
81
编程经验
10+
If you are using the .NET Framework or .NET Core's SqlConnection then all that is needed to be installed on the user's machine is the .NET Framework or .NET Core. With .NET Core, 您甚至可以将应用程序独立部署,这样用户甚至不必安装.NET Core.

我建议更深入地了解导致登录失败的原因。如果有异常,请调用所有异常数据-不仅是顶级异常。某些例外情况会在初始描述文字之后加上多余的文字。此外,某些异常可能具有设置为包含更多详细信息的InnerException属性。

现在与您当前的问题相切。是的,在80年代和90年代,局域网中的人们的PC直接连接到位于同一局域网中的SQL Server是正常的。在Slammer和其他一些SQL Server问题之后,人们通常会继续使用"front office"人们的PC直接访问"back office"服务器。通常将Web服务设置为"front office"应用将访问网络服务,并且网络服务会将所需的请求中继到"back office"服务器。但是,如果您相信可以在LAN上裸访问SQL Server,那就是您的数据。

现在,另一方面,如果我们谈论的是Oracle,是的,如果使用Oracle Native Client,通常需要在用户计算机上安装许多其他DLL。如果您使用的是Oracle Managed Client,则可以仅使用与Nuget软件包一起打包并放入构建输出目录中的程序集。

我不知道MySQL或任何其他数据库的情况如何。

如果您使用的是OleDbConnection,那么,是的,您肯定需要为目标计算机上安装的所选数据库(MSSQL,Oracle,Paradox,DB2等)使用适当的OLEDB驱动程序/适配器。
我们正在为.Net 4.5进行构建,并使用System.Data.SQlClient而不是OleDbConnection访问SQL Server 2014数据库。我对你感兴趣"您甚至可以将应用程序独立部署,这样用户甚至不必安装.NET Core"。这是“构建”还是“发布”中的某个设置?对于发布,我有"Microsoft .Net Framework 4.5" checked.

仍在调查其余的异常数据,但是就像我提到的,凭据被编译到程序中。用户没有输入它,或者程序没有从用户登录名中获取它。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
我对你感兴趣"您甚至可以将应用程序独立部署,这样用户甚至不必安装.NET Core"。这是“构建”还是“发布”中的某个设置?对于发布,我有"Microsoft .Net Framework 4.5" checked.
就像我说的那样,这仅适用于.NET Core。 .NET Framework遵循Java哲学,即首先需要安装一些JVM。 .NET Core在支持安装在计算机上的框架以及Cygwin,MinGW和git之类的应用程序都更灵活的方面。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
仍在调查其余的异常数据,但是就像我提到的,凭据被编译到程序中。用户没有输入它,或者程序没有从用户登录名中获取它。
您确定连接字符串使用的是SQL身份验证而不是Windows身份验证?

您的SQL Server上是否有防火墙阻止了特定端口上的通信?

以我的经验,SQL异常中的登录失败消息比仅仅说特定帐户登录失败更为明确。通常,第一句话是登录失败,但其后是其他文本,可帮助您识别登录失败的原因。我已经看到指示网络超时的消息。我已经看到表明连接池已用尽的消息。我已经看到提示重试失败次数过多的消息。
 

tim8w

知名会员
已加入
2020年9月8日
留言内容
81
编程经验
10+
您确定连接字符串使用的是SQL身份验证而不是Windows身份验证?

您的SQL Server上是否有防火墙阻止了特定端口上的通信?

以我的经验,SQL异常中的登录失败消息比仅仅说特定帐户登录失败更为明确。通常,第一句话是登录失败,但其后是其他文本,可帮助您识别登录失败的原因。我已经看到指示网络超时的消息。我已经看到表明连接池已用尽的消息。我已经看到提示重试失败次数过多的消息。
连接字符串正在使用SQL身份验证。至于防火墙,如果是端口或防火墙问题,也无法在我的PC上运行。我试图将扩展错误保存到文本文件中,但是Windows不允许我的程序在用户系统上创建文本文件,因此我将其显示在MessageBox上。需要重新编译并重新部署。我将在这里发布任何我学到的东西。

因此,完整的错误消息说明了为什么未连接。出于某种原因,即使我在ConnectionString中明确要求连接SQLServer用户,它也会使用当前的PC登录名。您以前听说过这样的事情吗?是否必须设置一些标志或其他标志,以便它将使用我指定的connectionString而不覆盖它,而是使用Windows登录名?

这是我的ConnectionString:

C#:
SqlConnection myConnection = new SqlConnection("集成安全性= SSPI;持久安全性信息= False;Initial Catalog=FPY;Data Source=MyServer;User ID=PartsetupUser;Password=MyPassword");
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,533
地点
弗吉尼亚州切萨皮克
编程经验
10+
连接字符串是真正的硬编码,还是在app.config中?如果有一个app.config,则连接字符串的名称是什么?在计算机的.NET Framework目录中的machine.config或application.config中是否有连接字符串部分?如果有这样的部分,是否有同名的连接字符串?我认为优先。
 

tim8w

知名会员
已加入
2020年9月8日
留言内容
81
编程经验
10+
连接字符串是真正的硬编码,还是在app.config中?如果有一个app.config,则连接字符串的名称是什么?在计算机的.NET Framework目录中的machine.config或application.config中是否有连接字符串部分?如果有这样的部分,是否有同名的连接字符串?我认为优先。
那是"集成安全性= SSPI;持久安全性信息= False;"实际上更准确地说"集成安全性= SSPI;"这将强制连接到Windows登录,而不是连接中指定的SQL Server用户登录。感谢您提出的所有有见地的问题和指导。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,928
地点
英国
编程经验
10+
Connectionstrings.com是您的朋友。
 
最佳 底部