腾讯微群加入QQ群

 找回密码
 加入我们

!connect_header_login!

!connect_header_login_tip!

搜索
查看: 924|回复: 0

C/C++使用ODBC连接MSSQL数据库

[复制链接]
发表于 2016-8-23 15:03:45 | 显示全部楼层 |阅读模式

前几天在研究C/C++链接MSSQL数据的方法,前前后后在网上找了不少的文章,大多数文章都没法真正的解决入门新手的全部疑惑,所以在此整理一下自己整个连接数据库的过程,希望能帮到有需要的人。


一、首先是MSSQL server的安装,相信有不少同学会卡在这边。我安装的是MSSQL server2008 R2,前后也失败了几次。总结一下经验:1、安装前最好把360,防火墙都关了;2、一定要将SQL server数据库引擎安装成功,不然就不算安装成功;3、如果安装失败,需要重新安装,重新安装之前需要把之前安装的MSSQL完全卸载,方法如下链接http://wenku.baidu.com/view/569e4823a5e9856a561260a0.html; 4、重新安装的时候需要注意的是,将MSSQL server 2008 R2安装程序所在的路径添加到windows环境变量中(右击计算机---》属性---》高级系统设置---》环境变量---》系统变量(找到path)---》编辑---》添加符号 ; ---》把路径补上)。差不多这样就应该把SQL server 2008 R2安装成功了,具体方法我就部累述了。


二、创建ODBC数据源。

1、首先是打开控制面板---》管理工具---》数据源(ODBC),打开后如图所示:



PS:这个是我已经添加好的数据源。

2、选择用户DSN,点击添加,先择SQL server选项,点完成。注意添加前请将数据库服务启动:



3、给数据源命名,选择你安装MSSQL时创建的数据服务器,点下一步:



PS:这个名称就是数据源的名称,需要记住,后面写程序的时候要用到。

4、



这里要选择使用用户输入登录ID和密码的SQL server验证,之前选择第一个一直失败,不知道什么原因。登录名为sa,表示管理员身份。这里的客户端设置为:



5、关键一步,这边有一个默认数据库,如果不改变,就是master,这里要注意:如果不改变,那么之后程序中的SQL语句操作就是在master数据库中,除非你的SQL语句中加了use databasename。之前楼主就是遇到了这个问题,后面程序中会提到。



6、下一步,下一步,一直到完成。OK啦。


三、C/C++程序操作数据库。

终于到了最后一步了,不过楼主在这边也卡了很久(网上很多程序都不全,而且也米什么解释,蛋疼)。

在VS2010中创建Win32控制台应用程序项目,在里面新建一个.cpp文件(就是正常的写代码流程)。然后需要注意的是,我们要将文件的项目属性---》常规---》字符集改成是未设置,默认应该是使用Unicode字符集。





下面贴上代码:

#include <stdio.h>    
#include <string.h>    
#include <windows.h>    
#include <sql.h>   
#include <sqlext.h>    
#include <sqltypes.h>    
#include <odbcss.h>
#define MAXBUFLEN 255
SQLHENV henv = SQL_NULL_HENV;    
SQLHDBC hdbc1 = SQL_NULL_HDBC;    
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;

/*   cpp文件功能说明: 
1.数据库操作中的添加,修改,删除,主要体现在SQL语句上a 
2.采用直接执行方式和参数预编译执行方式两种
*/

int main()
{
RETCODE retcode;

UCHAR   szDSN[15] = "MYDB"; //数据源名称
UCHAR userID[6] = "sa";//数据库用户ID
UCHAR passWORD[29] = "wu57862520";//用户密码

//1.连接数据源  
//1.环境句柄   
retcode   =   SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE ,&henv);
retcode   =   SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
//2.连接句柄    
retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);     
retcode   =   SQLConnect(hdbc1,   szDSN,   SQL_NTS,   userID,   SQL_NTS, passWORD,   SQL_NTS);
//判断连接是否成功   
if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   )
{
printf("连接失败!\n");
}
else
{
/*
1.分配一个语句句柄(statement handle)    
2.创建SQL语句  
3.执行语句  
4.销毁语句  
*/ 
retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);
char sql[100] = "insert into test values(22,22)";
/*
这里需要在数据库中有test表,要事先建好哦。 
楼主当时就是卡在这里,因为我的默认数据是master,但是我一直操作的是test数据库中的test表,所以一直失败。
大家一定要注意,如果创建数据源的时候是默认的master数据库,而要操作test数据库中的表,要”use test insert into test//values(2,1)“
*/

retcode   = SQLExecDirect(hstmt1,(SQLCHAR *)sql,strlen(sql));
printf("操作成功!");
//释放语句句柄 
retcode   = SQLCloseCursor (hstmt1);
retcode   = SQLFreeHandle (SQL_HANDLE_STMT, hstmt1); 
}
//3.断开数据库连接
/*      
1. 断开数据库连接  
2.释放连接句柄.  
3.释放环境句柄(如果不再需要在这个环境中作更多连接) 
*/
SQLDisconnect(hdbc1);     
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);   
SQLFreeHandle(SQL_HANDLE_ENV, henv); 
return(0);
}

这只是一个简单的插入语句,更多操作,我们可以参考ODBC API,这里我就不累述了。


最后,希望大家都没成功!

0
0

转自:http://blog.csdn.net/nanyouWSH/article/details/47681903?locationNum=9
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|手机版|Archiver|小黑屋|一起疯|苦咖啡 ( 新ICP备12000197号  

GMT+8, 2018-1-19 05:55 , Processed in 0.050376 second(s), 11 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表