在VC++中构造SQL语句

在VC++中构造SQL语句 ======================= Author:  至尊宝宝(杭州) Email:  zaodt_ms@hotmail.com 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语句,现在我们用程序实现它

  1. char szBuf[]="SELECT au_name FROM authors WHERE au_id = 1";   
  2.   
  3. MessageBox( szBuf );  // 显示出来看看对不对  
char szBuf[]="SELECT au_name FROM authors WHERE au_id = 1";

MessageBox( szBuf );  // 显示出来看看对不对

这样,正确的SQL语句就在 szBuf 字符数组中了,可以用各种方法去执行它了。

=======

细心的朋友会发现这样不能满足要求,因为au_id是一个固定的值,实际上它有可能是个不固定的值, 这样该如何处理?方法如下:

  1. int nID;   
  2. char szBuf[100];   
  3.   
  4. nID = 10;  // 通过一些方法确定了ID的值   
  5.   
  6. sprintf( szBuf , "SELECT au_name FROM authors WHERE au_id = %d" , nID );   
  7.   
  8. MessageBox( szBuf );  // 显示出来看看对不对  
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 前后有一对单引号!

下面用程序生成它

  1. char szState[]="CA";   
  2. char szBuf[100];   
  3.   
  4. sprintf( szBuf , "SELECT au_name FROM authors WHERE state = '%s'" , szState );   
  5.   
  6. MessageBox( szBuf );  
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 类处理。

  1. CString szState("CA");   
  2. CString szBuf;   
  3.   
  4. szBuf.Format( "SELECT au_name FROM authors WHERE state = '%s'" , szState );   
  5.   
  6. MessageBox( szBuf );  
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) 论坛,记住我的名字:VistaUltimate(西安)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值