Re: Calling a store procedure
"Martin J. Evans" <[email protected]>
| Newsgroups | gmane.comp.db.unixodbc.devel |
|---|---|
| Organization | at home |
| Message-ID | <[email protected]> |
On 23/02/2012 03:05, Jaime Stuardo wrote:
> 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,
>
In my experience freeTDS sometimes returns an error and then there are
no diagnostics. I added a special case to Perl's DBD::ODBC because of it
which raises an error when an ODBC call fails and there are no diagnostics.
Martin
_______________________________________________
unixODBC-dev mailing list
[email protected]
http://mailman.unixodbc.org/mailman/listinfo/unixodbc-dev