我正在使用NSIS nsODBC插件来创建systemdsn条目。
当我按如下所示调用命令时,它可以工作并创建我的系统dsn odbc。
nsODBC::AddSysDSN "ODBC Driver 11 for SQL Server" "DSN=test" "server=localhost" "DATABASE=test" "Trusted_Connection=Yes"
Pop $0
Pop $ 0返回"成功"在我的ODBC数据源管理器中,我看到我的连接,它的工作原理。
但我需要使用用户名和密码创建我的系统dsn,在论坛和网站上我看到它们应该如下所示:
nsODBC::AddSysDSN "ODBC Driver 11 for SQL Server" "DSN=test" "server=test" "DATABASE=test" "UID=test" "PWD=test"
Pop $0
当我运行此命令时,Pop $ 0返回文本"错误"并且没有创建系统dsn。
我已经检查了它有测试数据库的SQL服务器实例,一个名为test的登录帐户,它是一个系统管理员帐户,它处于混合模式身份验证。
关于为什么它不会使用用户名和密码创建系统dsn的错误,我有什么建议吗?
提前致谢 安迪
答案 0 :(得分:0)
该插件设计糟糕,因为它使用堆栈上的所有内容作为参数。它也是数据库API的一个非常薄的包装器,因此只要您的堆栈在调用之前是空的,那么问题很可能是缺少/错误的参数而不是插件中的错误。
使用"foo=1" "bar=baz"
等参数调用插件是"已翻译"到foo=1\0bar=baz\0\0
,这是你在MSDN上看到的,这是双空终止密钥对字符串的C / C ++语法。
为什么Server
设置为test
而不是localhost
?
ConfigDSN
的MSDN页面上列出的代码显示:
例如,要配置需要用户ID,密码和数据库名称的数据源,安装应用程序可能会传递以下关键字 - 值对:
DSN=Personnel Data\0UID=Smith\0PWD=Sesame\0DATABASE=Personnel\0\0
也许这对订单很重要,我不知道。