从.Net访问SQL Server与从Qt
Difference Between SQL Server Access from .Net Versus Qt
我有两个应用程序,它们都访问同一个数据库。一个是用C#编写的,并使用.NET服务连接到数据库;另一个是用C++编写的,并使用Qt进行连接。我不是幕后机制的专家,所以我在一个特定的问题上有点挣扎。我遇到的问题是.NET应用程序远程运行良好,但Qt应用程序则不然。
这个问题是由服务器端问题引起的,其中Windows身份验证有一些奇怪之处。.NET应用程序在不触发Windows身份验证的情况下进行连接,但Qt应用程序显然正在使用Windows身份验证,尽管我尽了一切努力来避免它。显然,如果服务器得到修复(希望会得到修复),问题就会消失,但我需要创建一个额外的应用程序,它需要为更多的用户提供访问权限,而我无法处理所有用户的Windows身份验证,所以我需要想办法完全避免Windows身份验证。
.NET应用程序使用带有连接字符串的SqlDataAdapter类,该连接字符串的格式为"数据源=xxx.xxx.xxx.xxx;初始目录=nnnn;持久安全信息=True;用户ID=uuuuuu;密码=ppppp"。
Qt应用程序使用QSqlDatabase类和格式为"DRIVER={SQL SERVER};SERVER=xxx.xxx.xxx.xxx;Database=nnnn;UserID=uuuuuu;Password=ppppp"的连接字符串。
我试过在Qt应用程序中使用"数据源"格式,但它不起作用。我已经尝试了其他帖子中建议的各种参数(Trusted_Connection和Integrated Security),无论我做什么,Qt应用程序总是使用Windows身份验证,或者完全失败。失败时,错误消息指示连接字符串中存在无法识别的参数。
我花了几个小时搜索和试验。对于我需要编写的即将到来的应用程序,使用C#和.NET是一种可行的方法,但我对Qt更熟悉,使用这种方法可以更快地编写应用程序。在我看来,我应该能够在不经过Windows身份验证的情况下连接到服务器,但我现在不知所措。欢迎提出任何建议。
关于这个主题的另一个问题报告说,当他在连接失败后打印用户名时,这是他的本地用户名,而不是他在QSqlDatabase::setUserName中指定的用户名。在他的例子中,他将用户名和密码添加到连接字符串中(就像我最初的例子中一样)以使其工作。他的例子也使用了"user_id",而我的例子使用了"UserID"。(我不知道这些东西中的空格和下划线是否可以互换,但我有这种印象。)
当我在连接失败后打印QSqlDatabase对象的用户名时,无论我在连接字符串中输入了什么,我的用户名都是空白的。我既没有得到连接字符串中指定的用户名,也没有得到本地登录名。
他不起作用的代码还分别调用了QSqlDatabase::setUserName和QSqlDatabase::setPassword,而不是连接字符串。虽然这对他不起作用,但我没有尝试过,所以我尝试了,而且效果很好。
因此,在他的情况下,将身份验证放在连接字符串中是有效的;在我的情况下,在QSqlDatabase对象上指定身份验证是有效的。
虽然我仍然不清楚为什么会发生这些事情,但我的问题已经解决了,我可以继续使用Qt编写我的新应用程序,这将比在所有.NET技术上更快地开发。
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 将 Crashpad 与 Windows Qt 应用程序集成
- 从Qt上的UNIX域套接字(QLocalSocket)读取
- 为什么从 constexpr 引用生成的程序集代码与从 constexpr 指针生成的程序集代码不同?
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 从Qt QJsonDocument::toBinaryData使用non-Qt读取Binary Json?
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 如何从Qt QWebEngineView获取HTTP状态代码
- 如何从qt中的类中调用方法
- 从 Qt 中的信号调用成员函数的问题
- 从Qt应用程序执行MSI文件
- 如何从Qt绑定到在Windows 7 / 8 / 10中连接/断开USB设备事件
- 从Qt/C++-App并行运行两个Lua函数
- 将柯南包与普通Qt目录连接
- 从 QT Widget 对象实例访问 QT Widget 子成员
- 从 Qt(release) 生成的文件执行.EXE文件时出错
- 从.Net访问SQL Server与从Qt
- 从QT创建者运行的应用程序使用与单独运行时不同的库
- 如何传递一个值与点击信号从Qt PushButton