I am using the NSIS nsODBC plugin to create an systemdsn entry.
When I call the command as shown below it works and creates my system dsn odbc.
nsODBC::AddSysDSN "ODBC Driver 11 for SQL Server" "DSN=test" "server=localhost" "DATABASE=test" "Trusted_Connection=Yes"
Pop $0
Pop $0 Returns "Successful" and in my ODBC Data Source Administrator I see my connection and it works.
But I need to create my system dsn with a username and password, on the forums and site I have seen they say it should look like the following:
nsODBC::AddSysDSN "ODBC Driver 11 for SQL Server" "DSN=test" "server=test" "DATABASE=test" "UID=test" "PWD=test"
Pop $0
When I run this command Pop $0 returns the text "error" and no system dsn is created.
I have checked the SQL server instance it has the test database, a login account called test which is a system admin account, it is in mixed mode authentication.
Any suggestions as to what I am doing wrong as to why it will not create a system dsn with a username and password?
Thanks in advance Andy
That plug-in is badly designed because it uses everything on the stack as its parameters. It is also a very thin wrapper around the database API so as long as your stack is empty before calling then the problem is most likely a missing/wrong parameter and not a bug in the plug-in.
Calling the plugin with parameters like "foo=1" "bar=baz"
is "translated" to foo=1\0bar=baz\0\0
which is what you see on MSDN and that is the C/C++ syntax for a double null terminated key-pair string.
Why is Server
set to test
and not localhost
?
The code listed on the MSDN page for ConfigDSN
says:
For example, to configure a data source that requires a user ID, password, and database name, a setup application might pass the following keyword-value pairs:
DSN=Personnel Data\0UID=Smith\0PWD=Sesame\0DATABASE=Personnel\0\0
Maybe the pair order matters, I don't know.