在VC++中构造SQL语句


在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) 论坛,记住我的名字:至尊宝宝(杭州) 

你可能感兴趣的:(Visual,C++)