【问题标题】:How to concatenate string in _bstr_t and wchar_t?如何在 _bstr_t 和 wchar_t 中连接字符串?
【发布时间】:2019-10-13 06:03:22
【问题描述】:

我有 _bstr_t 字符串、wchar_t 和一个 unsigned int 变量,我想将它们放入字符串中......

_bstr_t strCnn("Driver={SQL Server};Server=some_host,some_port;Database=some_db;User ID=some_user;Password=some_psw;");

wchar_t *host,
unsigned int port,
wchar_t *db_name,
wchar_t *user,
wchar_t *password,

我将这 5 个变量传递给进行连接的函数。你能指导我如何将它们插入到连接字符串中。

我试过这样:

    wstring ws(host);
    string host_str(ws.begin(), ws.end());
    wstring ws_db(db_name);
    string db_str(ws_db.begin(), ws_db.end());
    wstring ws_user(user);
    string user_str(ws_user.begin(), ws_user.end());
    wstring ws_psw(password);
    string psw_str(ws_psw.begin(), ws_psw.end());

    std::string port_str = std::to_string(port);
    _bstr_t strCnn("Driver={SQL Server};Server="+host_str+","+port_str+";Database="+db_str+";User ID="+user_str+";Password="+psw_str+";");

但它说:

Error E0289 no instance of constructor "_bstr_t::_bstr_t" matches the argument list 
Error C2664 '_bstr_t::_bstr_t(const _bstr_t &) throw()': cannot convert argument 1 from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'const char *' 

【问题讨论】:

  • 其实据我了解这是 wchar_t* 类型的字符串。如何将所有内容转换/连接到 wchar_t?

标签: c++11 concatenation wchar-t bstr-t


【解决方案1】:

也许最简单的方法是使用std::wstringstream

您的代码可能类似于:

    std::wstringstream ws;
    ws << "Driver={SQL Server};Server=" << host << "," << port << ";Database=" << db << ";User ID=" << user << ";Password=" << pswr <<";";
    _bstr_t strCnn(ws.str().c_str());

_bstr_t 的构造函数采用const wchar_t*,因此无需进行任何中间转换。

【讨论】:

  • std::wstringstream ws;它说“不允许输入不完整的类型”。
  • 您需要包含std::wstringstream - #include &lt;sstream&gt; 的标头。
【解决方案2】:

当您构造要传递给strCnn 的字符串时,它是一个std::string 对象。 _bstr_t 没有采用 string 的构造函数,但确实有采用 const char * 的构造函数(这是错误消息告诉您的内容。

简单的解决方法是构造字符串并将其保存在局部变量中,然后将该字符串(转换为 const char *)传递给 _bstr_t 构造函数。

std::string port_str = std::to_string(port);
std::string connection = "Driver={SQL Server};Server="+host_str+","+port_str+";Database="+db_str+";User ID="+user_str+";Password="+psw_str+";";
_bstr_t strCnn(connection.c_str());

这可能不是构造字符串的最佳方式(std::stringstream 可能更好)。

由于您的原始参数字符串是宽字符,您可以使用宽字符(和std::wstring)构造连接字符串。

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 2012-05-30
    • 2023-03-15
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2012-11-13
    相关资源
    最近更新 更多