C语言与SQLserver连接_第1页
C语言与SQLserver连接_第2页
C语言与SQLserver连接_第3页
C语言与SQLserver连接_第4页
C语言与SQLserver连接_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、搭建环境Visual Studio 2008 + SQL Server 2008 + MSODBC(SQL Server 2008 已经携带)首先将SQL Server 2008安装好 并确保以开放1433端口。检测方法:打开cmd输入命令netstat an回车即可得到下图:n.住尤协议本地地址外部地址状态'TCP0.0.0.0800L1STEHINGTCP0.0.8.01350LISTENINGTCP0.0.8430,0-8,00LISTENINGTCP14330.00.00LISTENINGTCP2383 一0.0.0.00LISTENINGTCP070707033060.0.&

2、#163;2S I LISTENINGTCPe.0.0.090010.0.0.00LISTENINGTCP0.0.0.0491520.0.0.00LISTENINGTCP491530.0.000LISTENINGTCP0.8.0.0491540.0.0.00LISTENINGTCP491550.0.0.00LISTENINGTCP491580.0.8.00LISTENINGTCP0.0,0.0491640.0.0.00LISTENING给予以上前提我们将 SQL Server的SQL Server身份验证模式打开,确保能够使用用户sa身份登录数据库进行操作。(这很重要)打开的方法是找到 SQL

3、 Server配置管理器将SQL Server网络配置的两个协议中的Named Pipes协议和TCP/IP协议(一共四个)全部打开。(详细方法可在网上查到)使用sa身份登录数据库然后创建一个数据库命名为test,在建立一个test表(a varchar(200),bvarchar(200)。配置C语言环境打开 Visual Studio 2008 新建项目选择 Visual C+下的 Win32控制台应用程序设置成空项目,并输入以下代码:#include <stdio.h>#include <string.h>#include <windows.h>#in

4、clude <sql.h>#include <sqlext.h>#include <sqltypes.h>#include <odbcss.h>#define MAXBUFLEN 255SQLHENV henv = SQL_NULL_HENV;SQLHDBC hdbcl = SQL_NULL_HDBC;SQLHSTMT hstmtl = SQL_NULL_HSTMT;/*cpp文件功能说明:1. 数据库操作中的添加,修改,删除,主要体现在SQ姑句上a2. 采用直接执行方式和参数预编译执行方式两种*/int main()RETCODE retcod

5、e;/预编译SQLg句UCHAR pre_sql225 = "insert into test values(?,?)”;SQLCHAR ConnStrInMAXBUFLEN ="DRIVER=SQL Server;SERVER=127.0.0.1;UID=sa; PWD=yangsonghe;Trusted_Connection=yes;DATABASE=test;/1.连接数据源/1.环境句柄retcode = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);/*第二个参数原NULL*/retcode =

6、SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_IN TEGER);/2.连接句柄retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);retcode =SQLDriverConnect(hdbc1,NULL,ConnStrIn,SQL_NTS,NULL,NULL,NULL,SQL_DRIVER_NOPROMPT);/判断连接是否成功if ( (retcode != SQL_SUCCESS) && (retcode !

7、=SQL_SUCCESS_WITH_INFO) ) printf("连接失败!n"); else 1. 分配一个语句句柄 (statement handle)2. 创建SQ姑句3. 执行语句4. 销毁语句*/retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);/第一种方式/直接执行/添加操作/SQLExecDirect (hstmt1,sql,37);/第二种方式/绑定参数方式char a200= "bbb”;char b200= "200" ;SQLINTEGER p =

8、 SQL_NTS;/1预编译SQLPrepare(hstmt1,pre_sql,29); /第三个参数与数组大小相同,而不是数 据库列相同/2绑定参数值SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a, 0,&p);SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b, 0,&p);/3执行SQLExecute(hstmt1);printf("操作成功!”);/释放语句句柄S

9、QLCloseCursor (hstmt1);SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);/3.断开数据库连接/*1. 断开数据库连接2. 释放连接句柄.3. 释放环境句柄(如果不再需要在这个环境中作更多连接)*/SQLDisconnect(hdbc1);SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);SQLFreeHandle(SQL_HANDLE_ENV, henv);return (0);程序中主要还是使用了和MySQ占C语言连接时相同的函数,但 SQLDriverConnect函数参数较多且重要,需要着重理解。另外该程序的运

10、行需要增加链接库文件odbc32.lib , odbccp32.lib程序链接方法是#pragma comment (lib,"库文件名")。注意在头文件位置写,如果使用VC6可以再setting->link 里设置。将以上步骤完成后编译运行即可得到如下结果:gbw C Wi n dowssystem 32c md. exe以上方法是非数据源连接,我们还可以使用更简单的方法:数据源连接。将test表建好以后,在运行里面输入 odbc打开ODBC:据源点击系统DNS添加数据源:添加项选择SQLServer名称为csql,服务器可以使用 SQLServer 2008中显示

11、的名称或者localhost或者127.0.0.1描述可以不写选择双重身份验证并输入sa密码。最后测试数据源,如果测试成功,说明数据源建立成功。我们可以进一步操代码中被注释掉的部分:/*UCHARszDSNSQL_MAX_DSN_LENGTH+1 = "csql”, szUIDMAXNAME = "sa”, szAuthStrMAXNAME = "yangsonghe"*/即为数据源的连接方式。其代码原型如下:#include <stdio.h>#include <string.h>#include <windows.h&g

12、t;#include <sql.h>#include <sqlext.h>#include <sqltypes.h>#include <odbcss.h>SQLHENV henv = SQL_NULL_HENV;SQLHDBC hdbcl = SQL_NULL_HDBC;SQLHSTMT hstmtl = SQL_NULL_HSTMT;/*cpp文件功能说明:1. 数据库操作中的添加,修改,删除,主要体现在 SQ姑句上2. 采用直接执行方式和参数预编译执行方式两种*/ int main()(RETCODE retcode;UCHAR szDSNS

13、QL_MAX_DSN_LENGTH+1 = "csql",szUIDMAXNAME ="sa",szAuthStrMAXNAME=""/SQL语句/直接SQ姑句UCHAR sql37 = "insert into test values('aaa','100')”;/预编译SQLg句UCHAR pre_sql29 = "insert into test values(?,?)"/1.连接数据源/1.环境句柄retcode = SQLAllocHandle (SQL_HAND

14、LE_ENV, NULL, &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, 4, szUID, 2, szAuthStr, 0);/判断连接是否成功if ( (retcode != SQL_SUCCESS) && (re

15、tcode !=SQL_SUCCESS_WITH_INFO) ) printf("连接失败!n"); else /2.创建并执行一条或多条SQ皓句/*1. 分配一个语句句柄 (statement handle)2. 创建SQ姑句3. 执行语句4. 销毁语句*/retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);/第一种方式/直接执行/添加操作/SQLExecDirect (hstmt1,sql,37);/第二种方式/绑定参数方式char a200= "bbb" ;char b200=

16、 "200" ;SQLINTEGER p = SQL_NTS;/1预编译SQLPrepare(hstmt1,pre_sql,29); /第三个参数与数组大小相同,而不是数据库列相同/2绑定参数值SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a, 0,&p);SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b, 0,&p);/3执行SQLExecute(hstmt1);printf("操作成功!”);/释放语句句柄SQLCloseCursor (hstmt1);SQLFreeHandle (

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论