2017-10-09 56 views
-1

我试图将来自CComboBox的CString变量转换为std::stringsql::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++代码更新。

+0

您试过 - 有什么问题? – 2017-10-09 13:38:33

+0

没有解决方案... –

+0

那意味着什么? – 2017-10-09 13:41:59

回答

1
  1. CStringTCHAR秒。被定义为charwchar_t

  2. CStringchar S/wchar_t s是与CStringA/CStringW相同。

  3. std::stringchar秒。

  4. A CString可以由CStringACStringW构建。

CString是,也许,一个CStringW,因此:

CStringW ws { L"Howdy!" }; 
std::string ss { CStringA{ws} }; 
std::cout << ss; 
0
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标志。