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

来源:互联网 发布:tt聊天软件 编辑:程序博客网 时间:2024/05/17 05:57

前几天在研究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 255SQLHENV 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";//数据库用户IDUCHAR 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