SQLBindParameter 函数的参数解析及使用方法
来源:互联网 发布:windows phone8.1刷机 编辑:程序博客网 时间:2024/06/06 01:50
以下资料均找自网上开源代码。
1 参数绑定API
执行参数化查询,需要将语句中各个参数对应的变量缓存,与Statement句柄实现绑定。
用于绑定参数的ODBC API函数:
SQLRETURN SQLBindParameter(
SQLHSTMT StatementHandle, // statement句柄SQLUSMALLINT ParameterNumber, // 参数位于语句中的序号,最小为1
SQLSMALLINT InputOutputType, // 入参/出参类型标识[1]
SQLSMALLINT ValueType, // 对应的C数据类型标识[2]
SQLSMALLINT ParameterType, // 对应的SQL数据类型标识[2]
SQLULEN ColumnSize, // 对应字段长度
SQLSMALLINT DecimalDigits, // 如果是浮点数,则对应字段精度
SQLPOINTER ParameterValuePtr, // 参数缓存
SQLLEN BufferLength, // 参数缓存字节数
SQLLEN * StrLen_or_IndPtr); // 用于表示字符串长度或NULL值的标识[3]
[1] 出参/入参标识:SQL_PARAM_INPUT,SQL_PARAM_OUTPUT,SQL_PARAM_INPUT_OUTPUT
ODBC 3.8后引入SQL_PARAM_INPUT_OUTPUT_STREAM和SQL_PARAM_OUTPUT_STREAM,
用于绑定时不指定数据长度,直到使用SQLGetData时,根据指定的缓存大小获取数据。
[2] ODBC数据类型标识:
SQL_CHAR,SQL_VARCHAR,SQL_LONGVARCHAR SQL_C_CHAR
SQL_WCHAR, SQL_WVARCHAR, SQL_WLONGVARCHAR SQL_C_WCHAR
----------------------------------------------------------------------------
SQL_DECIMAL,SQL_NUMERIC SQL_C_NUMERIC
SQL_BIGINT,SQL_INTEGER,SQL_SMALLINT, SQL_C_STINYINT,SQL_C_UTINYINT,
SQL_REAL,SQL_FLOAT,SQL_DOUBLE SQL_C_SSHORT,SQL_C_USHORT,
SQL_C_SLONG,SQL_C_ULONG,
SQL_C_SBIGINT,SQL_C_UBIGINT,
SQL_C_FLOAT,SQL_C_DOUBLE
----------------------------------------------------------------------------
SQL_TYPE_DATE SQL_C_TYPE_DATE
SQL_TYPE_TIME SQL_C_TYPE_TIME
SQL_TYPE_TIMESTAMP SQL_C_TYPE_TIMESTAMP
----------------------------------------------------------------------------
SQL_BINARY,SQL_VARBINARY,SQL_LONGVARBINARY SQL_C_BINARY
[3] StrLen_or_IndPtr: 用于表示ParameterValuePtr指向的缓存数据,
如果是字符串,则表示字符串有效字符数(或SQL_NTS表示NULL结尾)
如果字段值是NULL,则设置为SQL_NULL_DATA。
对于入参,如果输入值非NULL且不是字符串,则可输入NULL。
2 示例,执行参数化查询
void ExecuteParameterizedStatement(Statement hStmt)
{//const char * pszStmtCreate
// = "CREATE TABLE test.my_table(name varchar(20), age numeric(8))";
const char * pszStmtInsert = "INSERT INTO test.my_table VALUES(?, ?)";
SQLRETURN ret = SQL_SUCCESS;
ret = SQLPrepare(hStmt, pszStmtInsert, SQL_NTS);
char szName[32];
int iAge;
SQLlEN ind_name = SQL_NTS;
ret = SQLBindParameter(
hStmt, 1, SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_VARCHAR, 20, 0,
(SQLPOINTER)szName, 32, &ind_name);
ret = SQLBindParameter(
hStmt, 2, SQL_PARAM_INPUT,
SQL_C_SLONG, SQL_NUMERIC, 8, 0,
(SQLPOINTER)&iAge, sizeof(int), NULL);
// 向表中插入两条数据
strcpy(szName, "Michael");
iAge = 12;
ret = SQLExecute(hStmt);
strcpy(szName, "David");
iAge = 14;
ret = SQLExecute(hStmt);
}
以下是英文解析:
SQLBindParameter
Conformance
Version Introduced: ODBC 2.0
Standards Compliance: ODBC
Summary
SQLBindParameter binds a buffer to a parameter marker in an SQL statement. SQLBindParameter supports binding to a Unicode C data type, even if the underlying driver does not support Unicode data.
Note This function replaces the ODBC 1.0 function SQLSetParam. For more information, see "Comments."
Syntax
SQLRETURN SQLBindParameter(
SQLHSTMT StatementHandle,
SQLUSMALLINT ParameterNumber,
SQLSMALLINT InputOutputType,
SQLSMALLINT ValueType,
SQLSMALLINT ParameterType,
SQLUINTEGER ColumnSize,
SQLSMALLINT DecimalDigits,
SQLPOINTER ParameterValuePtr,
SQLINTEGER BufferLength,
SQLINTEGER * StrLen_or_IndPtr);
Arguments
StatementHandle [Input]
Statement handle.
ParameterNumber [Input]
Parameter number, ordered sequentially in increasing parameter order, starting at 1.
InputOutputType [Input]
The type of the parameter. For more information, see "InputOutputType Argument" in "Comments."
ValueType [Input]
The C data type of the parameter. For more information, see "ValueType Argument" in "Comments."
ParameterType [Input]
The SQL data type of the parameter. For more information, see "ParameterType Argument" in "Comments."
ColumnSize [Input]
The size of the column or expression of the corresponding parameter marker. For more information, see "ColumnSize Argument" in "Comments."
DecimalDigits [Input]
The decimal digits of the column or expression of the corresponding parameter marker. For further information concerning column size, see "Column Size, Decimal Digits, Transfer Octet Length, and Display Size," in Appendix D: Data Types.
ParameterValuePtr [Deferred Input]
A pointer to a buffer for the parameter's data. For more information, see "ParameterValuePtr Argument" in "Comments."
BufferLength [Input/Output]
Length of the ParameterValuePtr buffer in bytes. For more information, see "BufferLength Argument" in "Comments."
StrLen_or_IndPtr [Deferred Input]
A pointer to a buffer for the parameter's length. For more information, see "StrLen_or_IndPtr Argument" in "Comments."
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE.
- SQLBindParameter 函数的参数解析及使用方法
- SQLBindParameter
- main函数参数的解析及应用
- Infer的使用方法及参数
- shell自定义函数及参数调用解析
- C++ - 虚函数(virtual function)缺省参数的异常表现 及 正确使用方法
- intent.setFlags的参数含义及使用方法
- $.ajax 的使用方法及参数说明
- 称重传感器的参数及使用方法
- 关于函数中不确定参数的使用方法
- main函数的参数解析
- 函数可变参数va_list、va_start、va_arg、va_end原理及使用方法
- VerticalBannerView使用方法及解析
- memset函数使用方法解析
- trim()函数的含义及使用方法
- trim()函数的含义及使用方法
- sumproduct函数的使用方法及实例
- ##########(python 解析参数方法 可用) Python optionParser模块的使用方法 #######
- 守护进程
- 旋转字符串
- static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
- HTML_07_css_HTML5_and_Css3
- HTTPS详解
- SQLBindParameter 函数的参数解析及使用方法
- Linux中线程与CPU核的绑定
- 关于CPU内部的各种寄存器
- Linux中用守护进程检测程序运行
- Linux之------进程间通信
- 快速排列
- 关于JavaScript的namespace命名空间
- LeetCode 12. Integer to Roman
- 简图记录-git的基本使用