Я пытаюсь использовать функцию SQLDescribeParam() с UnixODBC и MariaDB. Независимо от того, что я пытаюсь использовать с этим параметром, он всегда возвращает SQL_DATETIME.
В моей таблице есть один столбец USERID, определенный как CHAR(20).
Мой оператор SELECT:
Я пытаюсь использовать функцию SQLDescribeParam() с UnixODBC и MariaDB. Независимо от того, что я пытаюсь использовать с этим параметром, он всегда возвращает SQL_DATETIME. В моей таблице есть один столбец USERID, определенный как CHAR(20). Мой оператор SELECT: [code]SELECT * FROM USERS WHERE USERID = ? [/code] Вот мой код и результаты: [code]#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, ¶meterSize, &decimalDigits, &nullable); if (SQL_SUCCEEDED(ret)) { std::cout
Как я могу отличить, если объект имеет тип DateTime или NullabledateTime> (dateTime?)?
Я понимаю, почему следующий код не работает, но вы можете мне помочь с Решение, которое делает?
public void Test()
{
DateTime? dateTime1 = new DateTime(2020,...
У меня есть следующий код, и я получаю вышеуказанную ошибку. Так как я новичок в Python, у меня возникают проблемы с пониманием синтаксиса здесь и как я могу исправить ошибку: