1
odbcを使用してSQL Serverデータベースにレコードを挿入しようとしましたが、いくつかの問題があります。以下のプログラムはVisual StudioでコンソールC++を使用するコードです。SQL Serverデータベースにデータを挿入できません。ODBC C++
#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 statement
UCHAR 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であり、このエラーがスクリーンショットに表示されています。データベースにレコードを挿入できません。データベースへの接続は問題ありませんでした。エラーコードは、プログラムが実行されるたびに異なります。
代わりに 'SQLExecDirect'を試してみます。 (ステートメントにはパラメータがないので) – jarlh
SQLExecDirectを使用しようとしましたが、同じエラーが発生しています。 –