SQLBindParameter 函数的参数解析及使用方法
2016-10-22 23:21
736 查看
以下资料均找自网上开源代码。
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.
相关文章推荐
- LINQ 要转换为 SQL,Math.Round 方法需要 MidpointRounding 参数。使用“AwayFromZero”来指定 SQL 函数 ROUND。
- SQL 查询合计方法及相应函数使用说明
- ms Sql server 中的getDate()函数使用方法总结
- 函数参数前加&, implode, http_build_query 的使用方法
- 实例解析使用指针作为函数参数传递需要注意的问题
- C#使用预处理SQL语句访问MySQL的方法(Parameter)
- 函数可变参数va_list、va_start、va_arg、va_end原理及使用方法
- sql output参数 Sql Output 参数和asp.net的sqlparameter配合使用
- 关于c++使用sql语句调用 mysql数据库中带参函数的方法
- 使用 SqlHelperParameterCache 类管理参数
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- 使用标量值函数作为主键自增值的时候,动软代码生成器的插入方法需要去掉主键的参数。
- C#使用预处理SQL语句访问MySQL的方法(Parameter)
- 深入了解C语言(函数的参数传递和函数使用参数的方法)
- 深入了解C语言(函数的参数传递和函数使用参数的方法)
- SqlParameter和SqlParameter[]的使用方法
- SQL CONVERT转化函数使用方法小结
- SQL CONVERT转化函数使用方法小结
- Oracle使用Sql把XML解析成表(Table)的方法
- 利用Uri获取返回的参数即getQueryParameter()方法的使用