Calling a store procedure
2012-02-23 03:05:22 GMT
Hello… I am trying to call a SQL Server 2005 stored procedure by mean of a C++ application running under RedHat Linux. unixODBC is installed correctly since I can connect to the database.
When I run SQLExecDirect, the returned value is an error. So, here are the questions:
· Why does an error occur?
· Why does the SQLGetDiagRec function cannot return the actual error? If I generate an error passing a string instead of a date in the second parameter, the error is: [FreeTDS][SQL Server]Error converting data type varchar to datetime. That means ExtractError function I implemented is correct.
This is the code with SQLExecDirect:
ret = SQLExecDirect(stmt, (SQLCHAR *) query.c_str(), SQL_NTS);
if (!SQL_SUCCEEDED(ret)) {
StoreSocket::ExtractError("SQLExecDirect", stmt, SQL_HANDLE_STMT);
return false;
}
Where query is:
execute usp_contrato_actualiza_aclaracion 'uno', '2012-02-22', 'dos', 'tres', 'cuatro', '2012-02-14', 'cinco', 'seis', 'siete', 'ocho', 'nueve', 'diez', 'once'
And the body of ExtractError is:
**************************
void StoreSocket::ExtractError(
char *fn,
SQLHANDLE handle,
SQLSMALLINT type) {
SQLINTEGER i = 0;
SQLINTEGER native;
SQLCHAR state[ 7 ];
SQLCHAR text[256];
SQLSMALLINT len;
SQLRETURN ret;
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);
}
**************************
Any help will be greatly appreciated,
|
Jaime Stuardo - Gerente General DESYTEC - Development, Systems & Technologies La Concepción 81 Of. 608, Providencia, Santiago + 56 2 264 9399 + 56 2 264 1558 |
_______________________________________________ unixODBC-dev mailing list unixODBC-dev <at> mailman.unixodbc.org http://mailman.unixodbc.org/mailman/listinfo/unixodbc-dev
Thanks
Jaime
-----Original Message-----
From: unixodbc-dev-bounces <at> mailman.unixodbc.org
[mailto:unixodbc-dev-bounces <at> mailman.unixodbc.org] On Behalf Of Nick Gorham
Sent: 23 de febrero de 2012 9:53
To: Development issues and topics for unixODBC
Subject: Re: [unixODBC-dev] Calling a store procedure
I would think that changing your code to be
if (!SQL_SUCCEEDED(ret)&& ret != SQL__NO_DATA ) {
Would give you want you want and work across platforms as well.
RSS Feed