SQLDescribeParam возвращает неверную информацию (всегда вводите SQL_DATETIME)C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 SQLDescribeParam возвращает неверную информацию (всегда вводите SQL_DATETIME)

Сообщение Anonymous »

Я пытаюсь использовать функцию SQLDescribeParam() с UnixODBC и MariaDB. Независимо от того, что я пытаюсь использовать с этим параметром, он всегда возвращает SQL_DATETIME.
В моей таблице есть один столбец USERID, определенный как CHAR(20).
Мой оператор SELECT:

Код: Выделить всё

SELECT * FROM USERS WHERE USERID = ?
Вот мой код и результаты:

Код: Выделить всё

#include 
#include 
#include 

std::string describeNullable(const SQLSMALLINT &value) {
switch(value) {
case SQL_NO_NULLS: return "SQL_NO_NULLS";
case SQL_NULLABLE: return "SQL_NULLABLE";
case SQL_NULLABLE_UNKNOWN: return "SQL_NULLABLE_UNKNOWN";
default:
return std::to_string(value);
}
}

std::string describeDataType(const SQLSMALLINT &value) {
switch(value) {
case SQL_UNKNOWN_TYPE: return "SQL_UNKNOWN_TYPE";
case SQL_CHAR: return "SQL_CHAR";
case SQL_NUMERIC: return "SQL_NUMERIC";
case SQL_DECIMAL: return "SQL_DECIMAL";
case SQL_INTEGER: return "SQL_INTEGER";
case SQL_SMALLINT: return "SQL_SMALLINT";
case SQL_FLOAT: return "SQL_FLOAT";
case SQL_REAL: return "SQL_REAL";
case SQL_DOUBLE: return "SQL_DOUBLE";
case SQL_DATETIME: return "SQL_DATETIME";
case SQL_VARCHAR: return "SQL_DATETIME";
case SQL_TYPE_DATE: return "SQL_TYPE_DATE";
case SQL_TYPE_TIME: return "SQL_TYPE_TIME";
case SQL_TYPE_TIMESTAMP: return "SQL_TYPE_TIMESTAMP";
default:
return std::to_string(value);
}
}

int main() {
// set environement
SQLHANDLE env;
auto ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
// get connection
SQLHANDLE conn;
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &conn);
std::string inConnectString{"DRIVER=MariaDB;UID=***;PWD=***;database=clientserver"};
SQLCHAR* outConnectString = new SQLCHAR[512];
SQLSMALLINT outStringLen{0};
ret = SQLDriverConnect(conn,SQL_NULL_HANDLE, reinterpret_cast(const_cast(inConnectString.c_str())),
inConnectString.length(),outConnectString, 512, &outStringLen,SQL_DRIVER_NOPROMPT);
delete [] outConnectString;
outConnectString = nullptr;

// set statement
SQLHANDLE stmt;
ret = SQLAllocHandle(SQL_HANDLE_STMT, conn, &stmt);
std::string sqlstmt{"SELECT * FROM USERS WHERE USERID = ?"};
ret = SQLPrepare(stmt,reinterpret_cast(const_cast(sqlstmt.c_str())), sqlstmt.length());

if (SQL_SUCCEEDED(ret)) {
SQLSMALLINT parmNum{1};
SQLSMALLINT dataType{0};
SQLULEN parameterSize{0};
SQLSMALLINT decimalDigits{0};
SQLSMALLINT nullable{SQL_NULLABLE};
ret = SQLDescribeParam(stmt, parmNum, &dataType, &parameterSize,
&decimalDigits, &nullable);
if (SQL_SUCCEEDED(ret)) {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78656855/sqldescribeparam-returning-wrong-information-always-type-sql-datetime[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»