mySQL.Format(_T("update %s set name=\'%s\',tele =\'%s\',address=\'%s\',email=\'%s\' where personID=\'%s\'"),tableName,name,tele,addr,email,personID);
mysql_real_query(&(pDlg->mysql),(const char *)mySQL.GetBuffer(),(UINT)mySQL.GetLength())!=0
表示这样怎么都执行不了,我试了,是mySQL为CString的原因,要是char *的话,就成功,
我怎么把CString的内容拷贝到char[]里面去啊
mysql_real_query(&(pDlg->mysql),(const char *)mySQL.GetBuffer(),(UINT)mySQL.GetLength())!=0
表示这样怎么都执行不了,我试了,是mySQL为CString的原因,要是char *的话,就成功,
我怎么把CString的内容拷贝到char[]里面去啊
试试getbuffer什么的
这个非常有用的强制操作符提供了一种非常有效的方法来访问存放在CString对象中的以空字符结尾的C字符串。此函数不拷贝字符而仅返回一个指针。如果你在获取指针之后修改此CString对象,则可能导致内存被重新分配,并使该指针无效。
T2A();
CString str( "134 ");
sprintf(chs,str);void CDlgcsdn20Dlg::OnButton2()
{
char chs[100];
CString str( "134 ");
//sprintf(chs,str);
strcpy(chs,str);} 楼主用这个吧
USES_CONVERSION;
ch = T2A(CString);
..., (LPTSTR) (LPCTSTR) mySQL, ...如果还是无法编译,那就是宽字符与窄字符的问题了,上面已经有答案了。
如:
char *pData = new char[mySQL.GetLength()+1];
memset(pData,0,mySQL.GetLength()+1);
strcpy(pData,mySQL);
char*ptr ;
CString str = "123" ;ptr = (LPSTR)(LPCTSTR)str ;
mysql_real_query(&(pDlg->mysql),(const char *)CStringA(mySQL),(UINT)mySQL.GetLength())!=0
m_pRecordset->Open(_variant_t(strSQL), m_pConnect.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); 我一直这样使用ADO连接和读写数据库操作
CString 转char* 得分情况转对于unicode 的代码,网上应该有 搜索一下
你在同一行里出现了GetBuffer()和GetLength()是不行的。
另外就是ANSI和Unicode的问题。VS2008应该默认用的Unicode编码,不过转换很简单,无需WideCharToMultiByte等复杂方法。
MYSQL应该用的ANSI编码。所以可以这样:
CStringA mySQLA;
mySQLA.Format("update %s set name=\'%s\',tele =\'%s\',address=\'%s\',email=\'%s\' where personID=\'%s\'",
tableName,
name,
tele,
addr,
email,
personID);
mysql_real_query(&(pDlg->mysql),(LPCSTR)mySQLA,(UINT)mySQLA.GetLength()+1)!=0注意GetLength的返回大小不含\0
注意memcpy或者strcpy得源地址都是const指针的,所以可以直接使用CString或CStringA的(LPCTSTR)或(LPCSTR)的运算符就可以了,不需要GetBuffer。只有你明确要按C风格去修改CString内容是才要用GetBuffer
http://blog.csdn.net/gemmo/article/details/6799776
希望对你有帮助。