nsis nsODBC插件不接受所有参数

时间:2018-03-17 22:54:50

标签: odbc nsis

我正在使用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的错误,我有什么建议吗?

提前致谢 安迪

1 个答案:

答案 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

也许这对订单很重要,我不知道。