我有_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 *'
答案 0 :(得分: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*
,因此无需进行任何中间转换。
答案 1 :(得分:0)
在构造要传递给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
)构造连接字符串。