函数原型如下:
SQLRETURN SQLBindParameter(
SQLHSTMT StatementHandle,
SQLUSMALLINT ParameterNumber,
SQLSMALLINT InputOutputType,
SQLSMALLINT ValueType,
SQLSMALLINT ParameterType,
SQLULEN ColumnSize,
SQLSMALLINT DecimalDigits,
SQLPOINTER ParameterValuePtr,
SQLLEN BufferLength,
SQLLEN * StrLen_or_IndPtr);
我对参数6,8 9和10以及它们如何应用于变量字符串更感兴趣。其他内置数据类型似乎问题较少 我在互联网上看到的所有例子 例如http://msdn.microsoft.com/en-us/library/ms709287(v=vs.85).aspx 使用看似直截了当的静态数组。但是我要 使用std :: vector,我的所有尝试都失败了。
所以说我想绑定这些字符串。
std::vector<std::string> countries = boost::assign::list_of("Argentina")( "Burkina Faso")( "China")( "Dominica Republic");
注意:我使用std::vector<string>
作为声明的便利。
我无法将c.str()
发送到数据库,驱动程序应该能够在某些情况下修改字符串
所以我宣布一个像这样的缓冲区
std::vector<char> my_data;
并将我的字符串复制到缓冲区。
如何通过这些参数:
ColumnSize ?
ParameterValuePtr ? // this I think I am sure should be &my_data[0]
BufferLength ?
答案 0 :(得分:0)
注意:我使用std :: vector作为声明的方便。我无法将c.str()发送到数据库,驱动程序应该能够在某些情况下修改字符串
如果你正在使用C ++ 11,那么你可以std::string& str = myVectorOfStrings[i]; char* buf = &str[0]
;无需复印。
如果你正在使用C ++ 03 it's a little more debatable as to how safe this is。严格来说,当时的字符串并不保证是连续的,但我们中的许多人都认为 - 出于各种原因 - 无论如何都应该安全地承担它。
如果您对此不满意,那么您当前的方法非常正确......然后,是的,char* buf = &myVectorOfCopiedChars[0]
是正确的。