从C+;向SQL表中的整数列发送空值+;应用 < >我正在对SQL Server 2005表进行程序变量的批量复制,在C++应用程序中使用 bCPyBoin < /C>和 BCPysDeNord
但是,表中的某些整数列允许从C+;向SQL表中的整数列发送空值+;应用 < >我正在对SQL Server 2005表进行程序变量的批量复制,在C++应用程序中使用 bCPyBoin < /C>和 BCPysDeNord,c++,sql-server-2005,bind,bcp,C++,Sql Server 2005,Bind,Bcp,但是,表中的某些整数列允许null值。当需要为其中一列发送null值时,我不太确定如何在运行时使用bcp\u sendrow发送null值 在bcp_bind上显示: 将包含绑定的空值的行大容量复制到服务器 列中,实例的iIndicator成员的值应设置为 SQL\u空\u数据 然而,这仍然不能让事情变得很清楚。我是否应该对bcp\u sendrow进行两种不同的调用:一种用于非空情况,另一种用于空情况?SQL server批量复制接口有两种不同的方法来声明空值: 您可以将SQL_NULL_数据
null
值。当需要为其中一列发送null
值时,我不太确定如何在运行时使用bcp\u sendrow
发送null
值
在bcp_bind
上显示:
将包含绑定的空值的行大容量复制到服务器
列中,实例的iIndicator成员的值应设置为
SQL\u空\u数据
然而,这仍然不能让事情变得很清楚。我是否应该对
bcp\u sendrow
进行两种不同的调用:一种用于非空情况,另一种用于空情况?SQL server批量复制接口有两种不同的方法来声明空值:
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)的大小,并将值放入值中。如果列应为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);
谢谢你,伊恩。我使用了SQLUSMALLINT,必须将地址转换为BYTE*
bcp_bind(m_hdbc,(BYTE*)&mystruct,8,SQL_VARLEN_DATA,NULL,(INT)NULL,SQLINT1,colno)
还没有测试过它,但我希望它能工作,我对u int64有点怀疑,考虑到我必须按照bcp_bindYes的要求将结构强制转换为无符号字符*,但无论数据类型如何,都必须将所有内容强制转换为无符号字符*
。重要的是,如果希望能够在其中使用SQL\u NULL\u DATA
,请为指示符值保留8个字节。我确实保留了8个字节,但由于某种原因bcp\u sendrow()失败。让我试着发布代码降价是不起作用的,我只是不能解决它现在,因为我必须满足最后期限。如果你能复印出来看看,那就太好了。在调用bcp_sendrow()之前,有两个for循环,一个用于绑定,另一个用于实际插入