在VC++中构造SQL语句
=======================
Author: 至尊宝宝(杭州)
Email: [email protected]
Date: 2008-6-8
转载请附带以上信息,谢谢!
目录:
1、简介
2、表结构
3、写一条SQL语句
4、用程序生成上边的SQL语句
5、字符数据类型
6、在MFC中使用CString类
7、结束语
1、简介
好多朋友在构造SQL语句时遇到问题,所以我决定写一篇详细些的短文;
有这个想法好久了,现在我终于开始了……
SQL语句就是一条字符串,生成它的过程就是一个格式化字符串的过程。
在我们开始学习C语言的时候,就已经接触过 sprintf 库函数,
这里,我们主要就是使用 sprintf 函数格式化字符串。
2、表结构
这里我们使用 SQL Server 中的示例数据库进行讲解(有些改动)。
表:authors
列|数据类型
au_id 整形(主键)
au_name 字符
phone 字符
city 字符
state 字符
3、写一条SQL语句
根据au_id查询指定的作者姓名
SELECT au_name FROM authors WHERE au_id = 1
4、用程序生成上边的SQL语句
上边是一条正确的SQL语句,现在我们用程序实现它
char szBuf[]="SELECT au_name FROM authors WHERE au_id = 1";
MessageBox( szBuf ); // 显示出来看看对不对
这样,正确的SQL语句就在 szBuf 字符数组中了,可以用各种方法去执行它了。
=======
细心的朋友会发现这样不能满足要求,因为au_id是一个固定的值,实际上它有可能是个不固定的值,
这样该如何处理?方法如下:
int nID;
char szBuf[100];
nID = 10; // 通过一些方法确定了ID的值
sprintf( szBuf , "SELECT au_name FROM authors WHERE au_id = %d" , nID );
MessageBox( szBuf ); // 显示出来看看对不对
5、字符数据类型
下面我们查询一个字符数据类型的列,这里查询州名为CA的作者姓名,正确的SQL语句如下:
SELECT au_name FROM authors WHERE state = 'CA'
注意:CA 前后有一对单引号!
下面用程序生成它
char szState[]="CA";
char szBuf[100];
sprintf( szBuf , "SELECT au_name FROM authors WHERE state = '%s'" , szState );
MessageBox( szBuf );
注意:%s 前后有一对单引号!
为什么字符类型的列要用单引号呢?
因为这是数据库引擎规定的,我们必须这么做;
如果数据库引擎规定使用#号,那我们就得这样写 #CA#,这个跟VC++没有关系。
6、在MFC中使用CString类
上面我们使用的是 sprintf 函数,那是基础;
现在我们使用 CString 类处理。
CString szState("CA");
CString szBuf;
szBuf.Format( "SELECT au_name FROM authors WHERE state = '%s'" , szState );
MessageBox( szBuf );
看起来,它们很像;实际上,CString 类内部就是使用了 sprintf 函数。
7、结束语
上面只用到了 SELECT 语句,因为用这个作为例子非常简单,容易理解。
其它的 Insert Update Delete 是类似的,只要保证 SQL 语法正确即可。
时间过的真快,要到说再见的时候了!
我常在 CSDN VC/MFC(http://bbs.csdn.net) 论坛,记住我的名字:至尊宝宝(杭州)