Невозможно вставить данные в переполнение стека ODBC базы данных SQL Server.

Я пытался вставить запись в базу данных сервера sql с помощью odbc, но у меня возникли некоторые проблемы. Программа ниже представляет собой код, использующий консоль c ++ на Visual Studio.

#include "stdafx.h"#include <iostream>
#include <Windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>

using namespace std;int _tmain(int argc, _TCHAR* argv[])
{

RETCODE rc;
HENV henv;
HDBC hdbc;
HSTMT hstmt;
SDWORD cdData;

cout << "Attempting Connection " << endl;

SQLAllocEnv(&henv);
SQLAllocConnect(henv, &hdbc);
rc = SQLConnect(hdbc, L"DatasourceTest", SQL_NTS, 0, SQL_NTS, 0, SQL_NTS);

if ((rc != SQL_SUCCESS) && (rc != SQL_SUCCESS_WITH_INFO))
{
cout << "Cannot open database -- make sure ODBC is confugured properly." << endl;
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
cout << "Press ENTER to continue." << endl;
cin.get();
return 1;
}
else
{
cout << "Connected -- ODBC is confugured properly." << endl;
}

//Create a SQL statementUCHAR  szSqlStr[] = "INSERT INTO PERSONS (FirstName, LastName) VALUES ('Jack', 'Benson')";
cout << "Executing " << szSqlStr << endl;
rc = SQLAllocStmt(hdbc, &hstmt);
rc = SQLPrepare(hstmt, (SQLWCHAR*)szSqlStr, sizeof(szSqlStr));
rc = SQLExecute(hstmt);

cout << "rc" << rc << endl;
cout << "SQL_SUCCESS" << SQL_SUCCESS << endl;
cout << "SQL_SUCCESS_WITH_INFO" << SQL_SUCCESS_WITH_INFO << endl;if ((rc != SQL_SUCCESS) && (rc != SQL_SUCCESS_WITH_INFO))
{
//ERROR
SQLWCHAR sqlState[8];
SQLWCHAR msgText[1024];
SQLINTEGER NativeErrorPtr;
SQLSMALLINT TextLengthPtr;
SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, 1, sqlState, &NativeErrorPtr, msgText, sizeof(msgText), &TextLengthPtr);

SQLFreeStmt(hstmt, SQL_DROP);
SQLDisconnect(hdbc);
SQLFreeConnect(hdbc);
SQLFreeEnv(henv);
cout << "Error " << endl << msgText << endl;
cout << "Press ENTER to continue." << endl;}cin.get();
return 0;
}

введите описание изображения здесь

Я приложил вывод программы в этой теме. Возвращенный RETCODE был -1, и эта ошибка видна на скриншоте. Я не могу вставить какую-либо запись в базу данных. Подключение к базе данных было в порядке. Код ошибки отличался при каждом запуске программы.

1

Решение

Основная ошибка заключается в том, что вы передаете строку ANSI в Unicode-версию SQLPrepare.

UCHAR  szSqlStr[] = "INSERT INTO PERSONS (FirstName, LastName) VALUES ('Jack', 'Benson')";
...
rc = SQLPrepare(hstmt, (SQLWCHAR*)szSqlStr, sizeof(szSqlStr));

Измените кодировку вашей программы на ANSI или превратите строку запроса в юникод. Также следует учитывать, что последний параметр принимает длину в символах, а не в байтах.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]