[Asterisk-Dev] calling stored procedure
Brian West
brian.west at mac.com
Mon Feb 21 18:21:20 MST 2005
Why not just create a trigger to call the procedure for you?
/b
On Feb 21, 2005, at 8:21 AM, Kamran Ahmad wrote:
> hello
>
> i am writting an application to call procedure from MS
> Sql Server. Can anyone tell me whend i want to call MS
> Sql Server Procedure. it is giving me error when i try
> to bind input/output parameter dynamicly.
>
> but when i try to call procedure by hardcoding it is
> working i want to bind parameters for input and
> output.
> -----------------------------------------------------
> ODBC_res = SQLPrepare( ODBC_stmt, "{call AuthUser
> ('kamran', 'ahmad')}", SQL_NTS );
> -----------------------------------------------------
>
> here is my code two functions first db_check_connected
> is working well second one ExecProcedure() is only
> working in case i mentioned early. can you check it
> what could be the problem.
> this solution is defined on this site
> http://developer.mimer.se/interfaces/interface_3.htm
>
> int db_check_connected(void)
> {
> long int ODBC_err;
> short int ODBC_mlen;
> int ODBC_res;
> char ODBC_msg[200], ODBC_stat[10];
>
> if (ODBC_env == SQL_NULL_HANDLE || connected == 0)
> {
> ODBC_res = SQLAllocHandle(SQL_HANDLE_ENV,
> SQL_NULL_HANDLE, &ODBC_env);
> if ((ODBC_res != SQL_SUCCESS) && (ODBC_res !=
> SQL_SUCCESS_WITH_INFO))
> {
> printf("app_prepaid_auth_pin: Error
> AllocHandle\n");
>
> connected = 0;
> return -1;
> }
>
> ODBC_res = SQLSetEnvAttr(ODBC_env,
> SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
>
> if ((ODBC_res != SQL_SUCCESS) && (ODBC_res !=
> SQL_SUCCESS_WITH_INFO))
> {
> printf("app_prepaid_auth_pin: Error SetEnv\n");
>
> SQLFreeHandle(SQL_HANDLE_ENV, ODBC_env);
> connected = 0;
> return -1;
> }
>
> ODBC_res = SQLAllocHandle(SQL_HANDLE_DBC, ODBC_env,
> &ODBC_con);
>
> if ((ODBC_res != SQL_SUCCESS) && (ODBC_res !=
> SQL_SUCCESS_WITH_INFO))
> {
> printf("app_prepaid_auth_pin: Error AllocHDB %d\n",
> ODBC_res);
>
> SQLFreeHandle(SQL_HANDLE_ENV, ODBC_env);
> connected = 0;
> return -1;
> }
>
> SQLSetConnectAttr(ODBC_con, SQL_LOGIN_TIMEOUT,
> (SQLPOINTER *)10, 0);
> }
>
> printf("app_prepaid_auth_ping:information
> DSN=%s;username=%s;password=%s\n",dsn,username,password);
>
> ODBC_res = SQLConnect(ODBC_con, (SQLCHAR*)dsn,
> SQL_NTS, (SQLCHAR*)username, SQL_NTS,
> (SQLCHAR*)password, SQL_NTS);
>
> if ((ODBC_res != SQL_SUCCESS) && (ODBC_res !=
> SQL_SUCCESS_WITH_INFO))
> {
> printf("app_prepaid_auth_pin: Error SQLConnect
> %d\n", ODBC_res);
>
> SQLGetDiagRec(SQL_HANDLE_DBC, ODBC_con, 1,
> ODBC_stat, &ODBC_err, ODBC_msg, 100, &ODBC_mlen);
> SQLFreeHandle(SQL_HANDLE_ENV, ODBC_env);
> connected = 0;
> return -1;
> }
> else
> {
> printf("app_prepaid_auth_pin: successfully1
> Connected to %s\n", dsn);
> printf("app_prepaid_auth_pin: successfully Connected
> to %s\n", dsn);
> //ast_verbose( VERBOSE_PREFIX_4
> "app_prepaid_auth_pin: successfully Connected to
> %s\n", dsn);
> connected = 1;
> }
>
> return 0;
> }
>
> static int ExecProcedure()
> {
> char sqlcmd[sqlcommandsize] = "";
> int res = 0;
> char * prompt = NULL;
>
> char ODBC_stat[10];
> char ODBC_msg[200];
> int ODBC_mlen;
>
> if (connected)
> {
> int res=0;
>
> SQLCHAR user[21];
> SQLCHAR password[21];
> SQLINTEGER userInd, passwordInd;
> SQLUINTEGER result;
> SQLINTEGER resultInd;
>
> int ODBC_res;
>
> ODBC_res =
> SQLAllocHandle(SQL_HANDLE_STMT,ODBC_con,&ODBC_stmt);
>
> if (ODBC_res == SQL_ERROR)
> {
> printf( "Failed to allocate connection handle\n" );
> }
>
> //ODBC binding parameter to check result after
> select
>
> ODBC_res = SQLPrepare( ODBC_stmt, "{call AuthUser
> (?, ?)}", SQL_NTS );
>
> if ((ODBC_res != SQL_SUCCESS) && (ODBC_res !=
> SQL_SUCCESS_WITH_INFO))
> {
> printf("Error in PREPARE %d\n", ODBC_res);
> SQLFreeHandle(SQL_HANDLE_STMT, ODBC_stmt);
> connected = 0;
> return 0;
> }
>
> SQLSMALLINT numparams;
>
> SQLBindParameter( ODBC_stmt, 1, SQL_PARAM_INPUT,
> SQL_C_CHAR, SQL_CHAR, 20, 0, user, sizeof(user),
> &userInd );
> SQLBindParameter( ODBC_stmt, 2, SQL_PARAM_INPUT,
> SQL_C_CHAR, SQL_CHAR, 20, 0, password,
> sizeof(password), &passwordInd );
>
> SQLSetStmtAttr( ODBC_stmt, SQL_ATTR_QUERY_TIMEOUT,
> (SQLPOINTER)10, 0 );
>
> SQLNumParams( ODBC_stmt, &numparams );
>
> strcpy(user, "Kamran");
> userInd = SQL_NTS;
> strcpy(password, "ahmad");
> passwordInd = SQL_NTS;
>
> printf("calling AuthUser procedure\n");
>
> ODBC_res = SQLExecute(ODBC_stmt);
>
> printf("called AuthUser procedure now checking
> result\n");
>
> if ((ODBC_res != SQL_SUCCESS) && (ODBC_res !=
> SQL_SUCCESS_WITH_INFO))
> {
> printf( "Error in Query %d\n", ODBC_res);
>
>
> SQLGetDiagRec(SQL_HANDLE_DBC,ODBC_con,1,ODBC_stat,&ODBC_msg,100,
> &ODBC_mlen,NULL);
> SQLFreeHandle(SQL_HANDLE_STMT, ODBC_stmt);
>
> printf("app_prepaid_auth_pin:Fatal Error:123\n");
>
> prompt = "prepaid-no-aaa";
>
> connected = 0;
> return -1;
> }
> else
> {
> printf("app_prepaid_auth_pin:Query Successful\n");
>
> connected = 1;
> }
>
> return 0;
> }
> else
> {
> //We are not connected to the DB
> return -1;
> }
>
> }
>
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail - 250MB free storage. Do more. Manage less.
> http://info.mail.yahoo.com/mail_250
> _______________________________________________
> Asterisk-Dev mailing list
> Asterisk-Dev at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-dev
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-dev
More information about the asterisk-dev
mailing list