从C++应用程序向SQL表中的整数列发送null值
Sending null values to an integer column in an SQL table from a C++ application
我正在将程序变量批量复制到SQL Server 2005表中,并在C++应用程序中使用bcp_bind
和bcp_sendrow
但是,表中的某些整数列允许null
值。当需要为其中一列发送null
值时,我不太确定应该如何在运行时使用bcp_sendrow
发送null
值。
bcp_bind
上的文档显示:
将包含绑定的NULL值的行大容量复制到服务器列,实例的iIndicator成员的值应设置为SQL_NULL_DATA
然而,这仍然没有让事情变得很清楚。我应该对bcp_sendrow
有两个不同的调用吗:一个用于非null情况,另一个用于null情况?
SQL server大容量复制接口有两种不同的方法来声明null值:
-
您可以指定SQL_NULL_DATA作为bcp_bind的cbData参数。这表示发送到服务器的所有行都将是NULL的
-
您可以使用指示符变量来说明列何时包含整数以及何时包含NULL。要做到这一点,您需要在int之前为64位指示符变量留出空间。文档在一个小结构中显示了这一点,如下所示:
typedef struct tagBCPBOUNDINT { __int64 iIndicator; int Value; } BCPBOUNDINT;
(我在这里把iIndicator改成了一个显式的64位整数;重要的是它不能更短。)
当您调用bcp_bind时,您指向结构,而不是值,并指定您使用的是一个8字节的指示符,并且数据长度是可变的。
bcp_bind(hdbc, &local_struct, 8, SQL_VARLEN_DATA, NULL, 0, SQLINT4, colIndex);
要发送包含此列中数据的行,请将iIndicator设置为整数字段(4)的大小,并将值放入value中。如果列应该为null,那么将iIndicator设置为SQL_null_DATA,并且不用担心值:
if (my_int_is_null) { local_struct.iIndicator = SQL_NULL_DATA; } else { local_struct.iIndicator = sizeof(int); local_struct.Value = my_int_value; } /* Fill the rest of the columns in a similar way */ /* ... */ /* finally, queue the row */ bcp_sendrow(hdbc);
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- std::当在256字节边界上写入整数时,流的奇怪行为
- 内联程序集printf将整数解释为地址
- 是否基于数组B整数打印数组A中的整数
- 如何在C++中将整数转换为其数字数组