int ProcExeSql(char *OrigCalleeCode)
{
HENV henv;
HDBC hdbc;
HSTMT hstmt;
SQLRETURN sr; SQLCHAR* theDiagState = new SQLCHAR[50];
SQLINTEGER theNativeState;
SQLCHAR* theMessageText = new SQLCHAR[255];
SQLSMALLINT iOutputNo; long param1 = 0;
char param2[20]; SQLINTEGER cbValue1 = sizeof(long);
SQLINTEGER cbValue2= sizeof(param2); SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, & henv );
sr = SQLSetEnvAttr( henv, SQL_ATTR_ODBC_VERSION, ( void * ) SQL_OV_ODBC3, 0 );
sr = SQLAllocHandle( SQL_HANDLE_DBC, henv, & hdbc );
sr = SQLConnect( hdbc, (SQLCHAR*) "Calllog", SQL_NTS, (SQLCHAR*) "sa",SQL_NTS,(SQLCHAR*) "145454", SQL_NTS);
sr = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, & hstmt );
sr = SQLSetStmtAttr( hstmt, SQL_ATTR_CURSOR_TYPE, ( void * ) SQL_CURSOR_DYNAMIC, SQL_IS_INTEGER );
sr= SQLBindParameter( hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER, sizeof( long ), 0,& param1, sizeof( long ), & cbValue1 );
sr = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, sizeof( param2 ), 0,& param2, sizeof( param2 ), & cbValue2 ); sr = SQLExecDirect( hstmt, ( unsigned char * ) "{ ? = call p_LH_CheckUser(?) }", SQL_NTS );
if (sr != SQL_SUCCESS)
{
//With this bug you will get an error message. Check this message in theMessageText.
SQLGetDiagRec(SQL_HANDLE_STMT,hstmt,1,theDiagState,&theNativeState,theMessageText,100,&iOutputNo);
}
sr = SQLMoreResults( hstmt ); SQLFreeStmt( hstmt, SQL_CLOSE );
SQLFreeStmt( hstmt, SQL_DROP );
SQLDisconnect( hdbc );
SQLFreeHandle( SQL_HANDLE_DBC, hdbc );
SQLFreeHandle( SQL_HANDLE_ENV, henv );
delete theMessageText;
delete theDiagState;
return param1;}存储过程如下:
CREATE procedure p_LH_CheckUser
@mbno varchar(21)as
set nocount on
declare @iCounts int --计数器 select @iCounts=1 //用于测试,修改这个值看返回的结果是否变化if @iCounts >2
begin
return 100
end
else
begin
return 101
end
GO
在我自己开发的机器上用一切没有问题,但是传到服务器上去,程序就不对了,跟踪所有的执行都是对的,SQLExecDirect函数也是成功执行了的,但是就是返回值param1始终返回0.但是在本机能正常返回100或者101。本机XP操作系统,sql server 开发版+ RTM,服务器2000操作系统, SQL SERVER 2000企业版+sp3,那位大侠帮我分析下是什么原因导致的取的返回值不成功???
{
HENV henv;
HDBC hdbc;
HSTMT hstmt;
SQLRETURN sr; SQLCHAR* theDiagState = new SQLCHAR[50];
SQLINTEGER theNativeState;
SQLCHAR* theMessageText = new SQLCHAR[255];
SQLSMALLINT iOutputNo; long param1 = 0;
char param2[20]; SQLINTEGER cbValue1 = sizeof(long);
SQLINTEGER cbValue2= sizeof(param2); SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, & henv );
sr = SQLSetEnvAttr( henv, SQL_ATTR_ODBC_VERSION, ( void * ) SQL_OV_ODBC3, 0 );
sr = SQLAllocHandle( SQL_HANDLE_DBC, henv, & hdbc );
sr = SQLConnect( hdbc, (SQLCHAR*) "Calllog", SQL_NTS, (SQLCHAR*) "sa",SQL_NTS,(SQLCHAR*) "145454", SQL_NTS);
sr = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, & hstmt );
sr = SQLSetStmtAttr( hstmt, SQL_ATTR_CURSOR_TYPE, ( void * ) SQL_CURSOR_DYNAMIC, SQL_IS_INTEGER );
sr= SQLBindParameter( hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER, sizeof( long ), 0,& param1, sizeof( long ), & cbValue1 );
sr = SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, sizeof( param2 ), 0,& param2, sizeof( param2 ), & cbValue2 ); sr = SQLExecDirect( hstmt, ( unsigned char * ) "{ ? = call p_LH_CheckUser(?) }", SQL_NTS );
if (sr != SQL_SUCCESS)
{
//With this bug you will get an error message. Check this message in theMessageText.
SQLGetDiagRec(SQL_HANDLE_STMT,hstmt,1,theDiagState,&theNativeState,theMessageText,100,&iOutputNo);
}
sr = SQLMoreResults( hstmt ); SQLFreeStmt( hstmt, SQL_CLOSE );
SQLFreeStmt( hstmt, SQL_DROP );
SQLDisconnect( hdbc );
SQLFreeHandle( SQL_HANDLE_DBC, hdbc );
SQLFreeHandle( SQL_HANDLE_ENV, henv );
delete theMessageText;
delete theDiagState;
return param1;}存储过程如下:
CREATE procedure p_LH_CheckUser
@mbno varchar(21)as
set nocount on
declare @iCounts int --计数器 select @iCounts=1 //用于测试,修改这个值看返回的结果是否变化if @iCounts >2
begin
return 100
end
else
begin
return 101
end
GO
在我自己开发的机器上用一切没有问题,但是传到服务器上去,程序就不对了,跟踪所有的执行都是对的,SQLExecDirect函数也是成功执行了的,但是就是返回值param1始终返回0.但是在本机能正常返回100或者101。本机XP操作系统,sql server 开发版+ RTM,服务器2000操作系统, SQL SERVER 2000企业版+sp3,那位大侠帮我分析下是什么原因导致的取的返回值不成功???
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货