解决方案 »
- vsflexgrid combolist属性 C++
- P2P网络通信问题?
- 本人想深入学习一下,API串口编程,请大家推荐一部教材。
- 为什么通过API得到的文件时间跟实际的文件时间不一样啊?
- 100分求助:ListCtrl中颜色和数据怎么保持同步,具体的步骤是怎么样的?请高手指点……
- 用VC能否实现“自动生成编号”?
- ▂▃▄▅▇█▉关于程序退出和PostQuitMessage( 0 ) ██▇▅▄▃▂
- VS2008类向导加载出错,求高手指教
- 编译时老是跳出提示APPMODUL.CPP
- 出现这句话时可能是那里出问题了?
- MFC全局变量定义及全局变量引用,为啥还说没定义?
- Progress control问题,请高手指点
2.例子代码如下:
#define FILE_DB_NAME TEXT("unitech.db")//获取程序当前路径
void GetCurrentDirectory(CString &szPath)
{
wchar_t pBuf[256];
GetModuleFileName(NULL,pBuf,sizeof(pBuf)/sizeof(wchar_t));
szPath=pBuf;
szPath = szPath.Left(szPath.ReverseFind('\\')+1);
}void CDemo2Dlg::OnButton1()
{
CString strDbPath;
GetCurrentDirectory(strDbPath);
strDbPath += FILE_DB_NAME; CppSQLite3DB db;
try
{
//打开或新建一个数据库
db.open(strDbPath); //判断表名是否存在
if(db.tableExists(L"tblTest"))
{
AfxMessageBox(L"Table: tblTest is existed!");
}
else //不存在
{
AfxMessageBox(L"Table: tblTest not existed!");
//新建表
db.execDML(L"create table tblTest(empno varchar(20), empname varchar(20))");
} //插入一笔记录
db.execDML(L"insert into tblTest values('编号', '姓名')");
//插入一笔记录
db.execDML(L"insert into tblTest values('精瑞电脑', 'Answer')"); //删除一笔记录
db.execDML(L"delete from tblTest where empno='编号'"); //插入10笔记录(使用事务)
TCHAR buf[256];
db.execDML(L"begin transaction;");
for (int i = 0; i < 10; i++)
{
memset(buf, 0, sizeof(buf));
wsprintf(buf, L"insert into tblTest values ('no%d', 'name%d');", i, i);
db.execDML(buf);
}
db.execDML(L"commit transaction;"); //更新一笔记录
db.execDML(L"update tblTest set empname='answer' where empno='no1'"); //获取总笔数
int count = db.execScalar(L"select count(*) from tblTest;");
TCHAR szCount[50];
memset(szCount, 0, sizeof(szCount));
wsprintf(szCount, L"Count:%d", count);
AfxMessageBox(szCount); //获取每一笔
CppSQLite3Query q = db.execQuery(L"select * from tblTest");
while (!q.eof())
{
AfxMessageBox(q.fieldValue(0));
q.nextRow();
}
q.finalize(); db.close();
AfxMessageBox(L"OK");
}
catch(CppSQLite3Exception ex)
{
AfxMessageBox(ex.errorMessage());
}
}
你好,VC+ADO+MYSQL我不会使用,能给我一个操作MYSQL封装类,或者是可以提供一下例子或方法吗?谢谢了,万事开头难。好人一生平安!
增查删改就用得到几个API函数,控制好Sql语句即可。
我现在工作中,就使用sqlite,工程包含其头文件和实现文件,可以直接调用API了。
你好,VC+ADO+MYSQL我不会使用,能给我一个操作MYSQL封装类,或者是可以提供一下例子或方法吗?谢谢了,万事开头难。好人一生平安!
http://blog.csdn.net/akof1314/article/details/5937103
小弟正是想知道怎么在Unicode环境下用API操作SQLite,遇到了问题。有关问题描述,麻烦看一下我回复8楼版主的内容,希望能帮忙解决,感激不尽!
我遇到这种问题,就是,取出来的数据,认为转换成支持中文的编码,将UTF8转换成gb2312
MultiByteToWideChar, WideCharToMultiByte。
小弟正是想知道怎么在Unicode环境下用API操作SQLite,遇到了问题。有关问题描述,麻烦看一下我回复8楼版主的内容,希望能帮忙解决,感激不尽!参考了MSDN和网上的资料,可是这两个函数还不会具体的使用方法,可以讲一下吗,麻烦您了!
我遇到这种问题,就是,取出来的数据,认为转换成支持中文的编码,将UTF8转换成gb2312
MultiByteToWideChar, WideCharToMultiByte。能将一下使用方法吗?谢谢
从该数据库中读取含有中文数据时,将UTF8格式反转成宽字符就好了。我这里有宽字符到utf8转换方法,你可以参考一下。至于utf8转成宽字符,主要用到MultiByteToWideChar这个函数。// 宽字符转换成utf8
const string& WCharToUtf8( const wstring& wstr )
{
static string strRet = "";
if ( wstr.empty() )
{
return strRet;
} int nLen = ::WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL); char* szUtf8 = NULL;
szUtf8 = new char[nLen];
if ( szUtf8 == NULL )
{
return (strRet = "" );
} memset( szUtf8, 0, nLen ); ::WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, szUtf8, nLen, NULL, NULL); strRet = string( szUtf8 );
if ( szUtf8 != NULL ) { delete [] szUtf8; szUtf8 = NULL; } return strRet;
}
DWORD dwLen = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)pszSrc, nLen, 0, 0);// 2 分配缓冲区
DWORD dwBufLen = (dwLen + 1) * sizeof (WCHAR);
PWCHAR pwszBuf = new WCHAR[dwLen + 1];
memset (pwszBuf, 0, dwBufLen);// 3 再次调用
MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)pszSrc, nLen, pwszBuf, dwBufLen);// 4 用完 释放内存
delete [] pwszBuf;