Я хотел бы использовать ODBC в C++. Эта строка кода возвращает -2 (rc=-2)
. Я думаю, что это код ошибки, но я не знаю, какая ошибка?определение статуса ошибки odbc с помощью C++
rc=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_DEFAULT, SQL_SS_TABLE,10,0,TVPTableName,SQL_NTS,&cbTVPTableNAme);
Я написал этот блок кода для извлечения состояния, но он ничего не возвращает:
void extract_error(
char *fn,
SQLHANDLE handle,
SQLSMALLINT type)
{
SQLINTEGER i = 0;
SQLINTEGER native;
SQLWCHAR state[ 7 ];
SQLWCHAR text[256];
SQLSMALLINT len;
SQLRETURN ret;
fprintf(stderr,
"\n"
"The driver reported the following diagnostics whilst running "
"%s\n\n",
fn);
do
{
ret = SQLGetDiagRec(type, handle, ++i, state, &native, text,
sizeof(text), &len);
if (SQL_SUCCEEDED(ret))
printf("%s:%ld:%ld:%s\n", state, i, native, text);
}
while(ret == SQL_SUCCESS);
}
знает ли кто-то, что делает этот код означает?
Вот мой полный код:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <sql.h>
#include <sqlext.h>
#include<sqltypes.h>
#include<exception>
#include<iostream>
#include<stdio.h>
#include "Debug\sqlncli.h";
int main()
{
SQLHENV henv=SQL_NULL_HENV;
SQLHDBC hdbc=SQL_NULL_HDBC;
SQLHSTMT hstmt=SQL_NULL_HSTMT;
RETCODE rc;
SQLWCHAR dsn[30] = L"mssqltest"; //Name DNS
SQLWCHAR user[10] = L"di_test";
SQLWCHAR pass[10] = L"di_test";
SQLCHAR retValFName[256];
SQLCHAR retValLName[256];
SQLINTEGER cbLName,cbFName;
SQLLEN cName=0;
SQLCHAR *TVPTableName=(SQLCHAR *) "Person";
SQLINTEGER Arraycode[10]={214,524,635,879,124,951,357,845,236,438};
SQLCHAR Arrayname[10]={ 'P', 'C', 'A', 'G', 'd', 'S', 'R', 'U', 'Q'};
SQLLEN cbTVPTableNAme,cbArraycode[10],cbArrayname[10];
//This line is very important for working with TVP
// 10 is the number of values, which should be added to TVP
rc=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_DEFAULT, SQL_SS_TABLE,10,0,TVPTableName,SQL_NTS,&cbTVPTableNAme);
extract_error(" ",hstmt,SQL_HANDLE_STMT);
}
«Вот мой полный код:« вы забыли заголовки. –
Oh Извините, я обновил свой код – Kaja