前几天在研究C/C++链接MSSQL数据的方法,前前后后在网上找了不少的文章,大多数文章都没法真正的解决入门新手的全部疑惑,所以在此整理一下自己整个连接数据库的过程,希望能帮到有需要的人。
一、首先是MSSQL server的安装,相信有不少同学会卡在这边。我安装的是MSSQL serverR2,前后也失败了几次。总结一下经验:1、安装前最好把360,防火墙都关了;2、一定要将SQL server数据库引擎安装成功,不然就不算安装成功;3、如果安装失败,需要重新安装,重新安装之前需要把之前安装的MSSQL完全卸载,方法如下链接/view/569e4823a5e9856a561260a0.html;4、重新安装的时候需要注意的是,将MSSQL server R2安装程序所在的路径添加到windows环境变量中(右击计算机---》属性---》高级系统设置---》环境变量---》系统变量(找到path)---》编辑---》添加符号 ; ---》把路径补上)。差不多这样就应该把SQL server 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++程序操作数据库。
终于到了最后一步了,不过楼主在这边也卡了很久(网上很多程序都不全,而且也米什么解释,蛋疼)。
在VS中创建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,这里我就不累述了。
最后,希望大家都没成功!