我正在学习如何使用SQLBindParameter函数。我在网上看了几个例子,不清楚我应该把什么作为第六个参数传递给SQLBindParameter函数。
当C类型为SQL_C_CHAR时,http://msdn.microsoft.com/en-us/library/ms710963(v=vs.85).aspx处的示例传递字符数组的大小;当C类型为SQL_C_SSHORT时,传递字符数组的大小。
SQLSMALLINT sCustID;
SQLCHAR szEmployeeID[EMPLOYEE_ID_LEN];
SQL_DATE_STRUCT dsOrderDate;
SQLINTEGER cbCustID = 0, cbOrderDate = 0, cbEmployeeID = SQL_NTS;..。
retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, EMPLOYEE_ID_LEN, 0, szEmployeeID, 0, &cbEmployeeID);
retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &sCustID, 0, &cbCustID);但是,http://publib.boulder.ibm.com/infocenter/db2e/v8r2/index.jsp?topic=%2Fcom.ibm.db2e.doc%2Fdbeapc1702.html中的一个示例为SQL_C_TCHAR传递了0,为SQL_C_LONG传递了一些正整数。
long p1 = 10;
short p2 = 100;
TCHAR p3[100];..。
// bind input parameters
rc = SQLBindParameter(hstmt, (unsigned short)1, SQL_PARAM_INPUT,
SQL_C_LONG, SQL_INTEGER, 4, 0, &p1, sizeof(p1), &len);
// check return code ...
rc = SQLBindParameter(hstmt, (unsigned short)2, SQL_PARAM_INPUT, SQL_C_LONG,
SQL_SMALLINT, 2, 0, &p2, sizeof(p2), &len);
// check return code ...
len = SQL_NTS;
rc = SQLBindParameter(hstmt, (unsigned short)3, SQL_PARAM_INPUT, SQL_C_TCHAR,
SQL_CHAR, 0, 0, &p3[0], 100, &len); 有没有人可以澄清一下,我们到底是如何决定传递给SQLBindParameter的参数的
发布于 2011-04-08 23:12:21
这是为了帮助确定某些类型的参数的字节大小,其他类型的参数将被忽略。
假设您有一个SQLCHAR[10]参数,您将把10作为列大小传入:
SQLCHAR empStr[10];
SQLINTEGER len = SQL_NTS;
retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 10, 0, empStr, 0, &len);编辑:
更清楚地说,变量类型需要传入大小,特别是字符串这样的可变大小类型,这样才能知道数据在内存中的结束位置。整数之类的类型具有基于操作系统和环境的静态定义的大小,因此指定大小通常是可选的,或者可能定义了一个常量,您可以使用它来代替计算。
考虑一下:
int smallInt = 5;
int bigInt = 234872634872;
char oneChar = 'A';
char charArray[128] = "CStyle String\0";
int smallIntSize = sizeof(smallInt);
int bigIntSize = sizeof(bigInt);
int oneCharSize = sizeof(oneChar);
int charArraySize = sizeof(charArray);在我使用Visual Studio2010的Windows764位机器上,smallInt和bigInt的大小都是4,oneChar的大小是1,charArray的大小是128,即使它包含的字符串要小得多,它仍然分配了所有的空间。
发布于 2020-04-17 16:13:18
ColumnSize参数与数据库方案中的列大小相对应
所有字符类型
定义的或最大的列大小(以列或参数的字符表示)(包含在SQL_DESC_LENGTH描述符字段中)。例如,定义为CHAR( 10 )的单字节字符列的列大小为10。(ODBC Reference)
对于固定长度(SQL_INTEGER等)数据类型,将忽略SQLBindParameter的ColumnSize参数。(ODBC Reference)
当大小它可能被一些驱动程序忽略,但其他驱动程序可能会将缓冲区截断为可变长度数据类型的大小,SQL_PARAM_INPUT描述传输到服务器的最大数据量。例如,对于Unicode字符串值,Size可用于将发送到服务器的数据量限制为前100个字符。(.NET ODBC reference)
当使用SQL_PARAM_*OUTPUT时,一些驱动程序在未指定ColumnSize时(尤其是[Microsoft][ODBC SQL Server Driver]COUNT field incorrect or syntax error)无法找到列,即使发送NULL也是如此。对于双向和输出参数以及返回值,必须设置Size的值。(.NET ODBC reference)
https://stackoverflow.com/questions/5596905
复制相似问题