Это не будет делать то, что вы думаете:
(SQLWCHAR*)"db1",
Если SQLWCHAR*
является указателем на широкий символ, то приведение неширокого строкового литерала не приведет к желаемым результатам, поскольку приведение не приведет к волшебному преобразованию неширокого строкового литерала в широкую строку. Функция ODB C не работает из-за того, что строка "db1"
оказывается некорректной, когда функция получает строку.
Надлежащий способ справиться с этим - сначала заставить код скомпилироваться без приведения типа строки к типу строки. Приведение строковых типов является признаком того, что что-то может go неправильно. Используйте строковый тип, который требуется функции.
Это касается любого приложения - если вы приводите строковые типы, вам лучше точно знать, что вы делаете, поскольку вы можете обойти безопасность типов C ++, выдача приведения в стиле C для подавления ошибки компилятора.
В этом случае тип строки SQLWCHAR
, таким образом создается строка (в данном случае изменяемая, поскольку это не const
указатель) можно сделать:
SQLWCHAR name [] = L"db1";
и тогда функции не потребуется приведение ко второму аргументу:
rc = SQLConnect( hdbc, /* Connection handle */
name, /* The ODBC DSN definition */
SQL_NTS, /* This is a null-terminated string */
NULL, /* No username required */
0, /* This is a null-terminated string */
NULL, /* No password required */
0);