我在VC6.0中想用ADO方式来读取MySQL中的数据,代码如下: AfxOleInit(); _ConnectionPtr m_pConn;
m_pConn.CreateInstance("ADODB.Connection");
m_pConn->Open("Driver={MySQL Connector/ODBC v5}; Server=localhost; Database=ubfinancedb; UID=root; PWD=123456;", "", "",adModeUnknown); _RecordsetPtr recordset;
recordset.CreateInstance("ADODB.Recordset"); recordset->Open("SELECT name FROM test", _variant_t((IDispatch *)m_pConn, true), adOpenStatic, adLockOptimistic, adCmdText);
if(!recordset->adoEOF)
{
_variant_t vName;
vName = recordset->GetCollect("name");
CString strPrint((LPCTSTR)(_bstr_t)vSalor);
AfxMessageBox(strPrint);
}
recordset->Close();代码本身比较简单,应该没什么问题,除了对_variant_t和_bstr_t搞不清楚。运行环境:
MySQL 版本 5.0.18。
Test表只有两个简单字段(id INT, name VARCHAR(20)), 假设有值(1, '谢谢大家').测试结果:
1)当ODBC Driver用3.51的版本{MySQL ODBC 3.51 Driver}时,上面代码读取的结果是乱码"????"
2) 但当ODBC Driver 用最新的 {MySQL Connector/ODBC v5}时,得到的结果是"谢谢",即只读到前一半的数据,如果字段值是字母则读到的结果正确无误,只是读取中文时每次只读到前一半的数据。十分怪异,请大家指教。有什么办法可以用ADO正确读取MySQL的中文字段。
m_pConn.CreateInstance("ADODB.Connection");
m_pConn->Open("Driver={MySQL Connector/ODBC v5}; Server=localhost; Database=ubfinancedb; UID=root; PWD=123456;", "", "",adModeUnknown); _RecordsetPtr recordset;
recordset.CreateInstance("ADODB.Recordset"); recordset->Open("SELECT name FROM test", _variant_t((IDispatch *)m_pConn, true), adOpenStatic, adLockOptimistic, adCmdText);
if(!recordset->adoEOF)
{
_variant_t vName;
vName = recordset->GetCollect("name");
CString strPrint((LPCTSTR)(_bstr_t)vSalor);
AfxMessageBox(strPrint);
}
recordset->Close();代码本身比较简单,应该没什么问题,除了对_variant_t和_bstr_t搞不清楚。运行环境:
MySQL 版本 5.0.18。
Test表只有两个简单字段(id INT, name VARCHAR(20)), 假设有值(1, '谢谢大家').测试结果:
1)当ODBC Driver用3.51的版本{MySQL ODBC 3.51 Driver}时,上面代码读取的结果是乱码"????"
2) 但当ODBC Driver 用最新的 {MySQL Connector/ODBC v5}时,得到的结果是"谢谢",即只读到前一半的数据,如果字段值是字母则读到的结果正确无误,只是读取中文时每次只读到前一半的数据。十分怪异,请大家指教。有什么办法可以用ADO正确读取MySQL的中文字段。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货