c++ - 在 C/C++ 程序中作为 ODBC SQLBindParameter 的 ColumnSize 参数传递什么?

标签 c++ c odbc

我正在学习如何使用 SQLBindParameter 函数。我在 Internet 上查看了几个示例,但不清楚我应该将什么作为第 6 个参数传递给 SQLBindParameter 函数。

http://msdn.microsoft.com/en-us/library/ms710963(v=vs.85).aspx 处的示例当 C 类型为 SQL_C_CHAR 时传递字符数组的大小,当 C 类型为 SQL_C_SSHORT 时传递 0。

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 的参数的吗?

最佳答案

这有助于确定某些类型的参数字节大小,其他类型则忽略它。

假设您有一个 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 Studio 2010 的 Windows 7 64 位机器上,smallInt 和 bigInt 的大小都是 4,oneChar 的大小是 1,charArray 的大小是 128,尽管它包含的字符串要小得多,但它仍然有所有空间分配。

关于c++ - 在 C/C++ 程序中作为 ODBC SQLBindParameter 的 ColumnSize 参数传递什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5596905/

相关文章:

c - redis freeReplyObject 不释放内存

sql - FileMaker - ODBC/JBDC 连接 - SQL 的方言

c - 使用指向 one-past-malloc 的指针是否定义明确?

postgresql - Postgres 使用 ODBC 驱动程序链接到 Big Query

sql-server - 尚不支持pandas + pyodbc ODBC SQL类型-150

c++ - Qt 模型测试,removeRows

C++ - 混洗对象 vector

c++ - cuda算法结构

c++ - 不理解 boost error_codes

clflush 通过 C 函数使缓存行无效