CString到STD ::字符串或SQL :: SQLString转换 - C++
问题描述:
我试图将来自CComboBox
的CString变量转换为std::string
或sql::SQLString
一个用于在SQL查询(使用Mysql连接器C++)中设置它。所以,在这里我的代码:CString到STD ::字符串或SQL :: SQLString转换 - C++
CComboBox *pComboRule = (CComboBox*)GetDlgItem(ID_EDIT_RULE);
CComboBox *pComboAg1 = (CComboBox*)GetDlgItem(ID_EDIT_AG1);
CComboBox *pComboAg2 = (CComboBox*)GetDlgItem(ID_EDIT_AG2);
CComboBox *pComboAg3 = (CComboBox*)GetDlgItem(ID_EDIT_AG3);
CString &AG1 = CString(_T("A string"));
CString &AG2 = CString(_T("A string"));
CString &AG3 = CString(_T("A string"));
CString str;
pComboAg1->GetLBText(pComboAg1->GetCurSel(), AG1);
pComboAg2->GetLBText(pComboAg2->GetCurSel(), AG2);
pComboAg3->GetLBText(pComboAg3->GetCurSel(), AG3);
try {
std::string s = CStringA(AG1);
sql::PreparedStatement *pstmt = con->prepareStatement("SELECT `nAccessIdn` FROM `base`.`tb_table` WHERE `field` IN (?, ?, ?) LIMIT 3");
pstmt->setString(1, s);
pstmt->setString(2, s);
pstmt->setString(3, s);
sql::ResultSet *res = pstmt->executeQuery();
if (res->rowsCount() != 0) {
while (res->next())
{
str.Format(_T("AG : %s\r\n"), res->getString(1));
OutputDebugString(str);
}
}
}
catch (const std::bad_alloc& e) {
CString itemString;
itemString.Format(_T("SQLException %s"), CString(e.what()));
MessageBox(itemString, _T("Failed Logon Attempt"), MB_OK | MB_ICONERROR);
}
我已经尝试了很多的东西一样
std::string s((LPCTSTR)AG1);
OR
std::basic_string<TCHAR>
OR
std::string std(somStr, someStr.GetLength());
OR
CT2A(cst.GetString());
OR
char* myStr = "This is a C string!";
std::string myCppString = myStr;
等等
有谁知道一种成功吗?
详情:
的Visual Studio 2017年社区版 - Unicode的项目 - 运行时库:/ MDD
非常感谢您的帮助:)
编辑:新手在C++代码更新。
答
甲
CString
由TCHAR
秒。被定义为char
或wchar_t
。甲
CString
由char
S/wchar_t
s是与CStringA
/CStringW
相同。std::string
由char
秒。A
CString
可以由CStringA
或CStringW
构建。
你CString
是,也许,一个CStringW
,因此:
CStringW ws { L"Howdy!" };
std::string ss { CStringA{ws} };
std::cout << ss;
答
CString &AG1 = CString(_T("A string"));
pComboAg1->GetLBText(pComboAg1->GetCurSel(), AG1);
这是错误的在很多方面。 AG1
是指向某些固定数据的指针,您正在设置AG1
与其他内容。
只需使用:
CString AG1;
pComboAg1->GetLBText(pComboAg1->GetCurSel(), AG1);
你的SQL数据预期为UTF-8。如果您正在创建一个新的MFC程序,则默认情况下启用UNICODE
选项(UTF-16)。
从数据库获取数据:
std::string str;
//get str from databases
CStringW atl = CA2W(str.c_str(), CP_UTF8);
combobox.AddString(atl);
将数据发送到DATABSE:
CString AG1;
combobox.GetLBText(0, AG1);
std::string str = CW2A(AG1, CP_UTF8);
...
在极少数情况下,数据可能是ANSI,在这种情况下删除CP_UTF8
标志。
您试过 - 有什么问题? – 2017-10-09 13:38:33
没有解决方案... –
那意味着什么? – 2017-10-09 13:41:59