繁体   English   中英

如何将动态数组(std :: vector)传递给odbc函数SQLBindParameter

[英]How to pass a dynamic array ( std::vector ) to an odbc function SQLBindParameter

函数原型如下:

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 ?

注意:我使用std :: vector来方便声明。 在某些情况下,我无法将c.str()发送到数据库,驱动程序应该能够修改字符串

如果您使用的是C ++ 11,则可以执行std::string& str = myVectorOfStrings[i]; char* buf = &str[0] std::string& str = myVectorOfStrings[i]; char* buf = &str[0] ; 无需副本。

如果您使用的是C ++ 03, 那么它的安全性还有待商bat 严格地说,当时的字符串并不能保证是连续的,但是出于种种原因,我们很多人认为,假设它是足够安全的。

如果您对此不满意,那么您当前的方法是非常正确的……然后,是的, char* buf = &myVectorOfCopiedChars[0]是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM