ODBC 存储过程declare @returnFlag varchar(5)返回获取

create proc sp_ValidateAdminCard
@param1 varchar(50) ---管理卡号

as
begin
declare @returnFlag varchar(5)

if exists(select top 1 C_CardNO from TB_AdminCard (nolock) where C_CardNO=@param1 and State=1)
begin
    set @returnFlag='1'
end
else 
begin
    set @returnFlag='0'
end

select @returnFlag

end

用的SQLExecDirect

该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

使用ODBC的SQLExecDirect函数执行存储过程可以通过以下步骤完成:


首先,建立ODBC连接并分配所需的环境和连接句柄。

SQLHENV henv;  // Environment handle
SQLHDBC hdbc;  // Connection handle
SQLHSTMT hstmt;  // Statement handle

// Allocate environment handle
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);

// Set the ODBC version
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);

// Allocate connection handle
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

// Connect to the database
SQLDriverConnect(hdbc, NULL, (SQLWCHAR*)L"your_connection_string", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

// Allocate statement handle
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

接下来,构造SQL语句,并使用SQLExecDirect函数执行存储过程。

// Declare variables for input/output parameters
SQLCHAR param1[51];  // Assuming maximum length of 50 characters
SQLLEN param1Length;
SQLCHAR returnFlag[6];  // Assuming maximum length of 5 characters
SQLLEN returnFlagLength;

// Set the input parameter value
strcpy_s((char*)param1, sizeof(param1), "your_admin_card_number");
param1Length = SQL_NTS;

// Prepare the SQL statement with the stored procedure call
const SQLCHAR* sqlStatement = (SQLCHAR*)"EXEC sp_ValidateAdminCard ?";
SQLPrepare(hstmt, sqlStatement, SQL_NTS);

// Bind the input parameter
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, sizeof(param1), 0, param1, sizeof(param1), &param1Length);

// Execute the statement
SQLExecDirect(hstmt, sqlStatement, SQL_NTS);

最后,获取存储过程的返回值。

// Bind the output parameter
SQLBindCol(hstmt, 1, SQL_C_CHAR, returnFlag, sizeof(returnFlag), &returnFlagLength);

// Fetch the result set (in this case, a single row)
SQLFetch(hstmt);

// Get the value of the returnFlag
std::string returnFlagValue((char*)returnFlag, returnFlagLength);

完成后,记得释放分配的句柄和关闭连接。

// Free statement handle
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);

// Disconnect from the database
SQLDisconnect(hdbc);

// Free connection handle
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

// Free environment handle
SQLFreeHandle(SQL_HANDLE_ENV, henv);

这样,你就可以使用ODBC的SQLExecDirect函数执行存储过程,并获取返回的结果。请确保替换示例代码中的连接字符串和输入参数的值以适应你的实际情况。