使用C语言来操作SQL SERVER数据库
http://simpledev.iteye.com/blog/339537
1.使用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作。
step1:启动SQLSERVER服务,例如:HNHJ,开始菜单 ->运行 ->net start mssqlserver
step2:打开企业管理器,建立数据库test,在test库中建立test表(a varchar(200),b varchar(200))
step3:建立系统DSN,开始菜单 ->运行 ->odbcad32,
添加->SQL SERVER
名称:csql,服务器:HNHJ
使用用户使用登录ID和密码的SQLSERVER验证,登录ID:sa,密码:
更改默认的数据库为:test
...
测试数据源,测试成功,即DNS添加成功。
2.cpp文件完整代码
//##########################save.cpp##########################
![](http://simpledev.iteye.com/images/icon_star.png)
#include <stdio.h> #include <string.h> #include <windows.h> #include <sql.h> #include <sqlext.h> #include <sqltypes.h> #include <odbcss.h> SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; /* cpp文件功能说明: 1.数据库操作中的添加,修改,删除,主要体现在SQL语句上 2.采用直接执行方式和参数预编译执行方式两种 */ int main(){ RETCODE retcode; UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql", szUID[MAXNAME] = "sa", szAuthStr[MAXNAME] = ""; //SQL语句 //直接SQL语句 UCHAR sql[37] = "insert into test values('aaa','100')"; //预编译SQL语句 UCHAR pre_sql[29] = "insert into test values(?,?)"; //1.连接数据源 //1.环境句柄 retcode = SQLAllocHandle (SQL_HANDLE_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) && (retcode != SQL_SUCCESS_WITH_INFO) ) { printf("连接失败!\n"); } else { //2.创建并执行一条或多条SQL语句 /* 1.分配一个语句句柄(statement handle) 2.创建SQL语句 3.执行语句 4.销毁语句 */ retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1); //第一种方式 //直接执行 //添加操作 //SQLExecDirect (hstmt1,sql,37); //第二种方式 //绑定参数方式 char a[200]="bbb"; char b[200]="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 (SQL_HANDLE_STMT, hstmt1); } //3.断开数据源 /* 1.断开与数据源的连接. 2.释放连接句柄. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接) */ SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(SQL_HANDLE_ENV, henv); return(0); }
//##########################list.cpp##########################
![](http://simpledev.iteye.com/images/icon_star.png)
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h> SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT; /*查询SQLSERVER数据库,1.条件查询,2.直接查询全部
*/
int main(){ RETCODE retcode; UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql", szUID[MAXNAME] = "sa", szAuthStr[MAXNAME] = ""; UCHAR sql1[39] = "select b from test where a = 'aaa'";UCHAR sql2[35] = "select b from test where a = ? ";UCHAR sql3[19] = "select b from test";retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1); //1.连接数据源retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { printf("连接失败!");} else { //2.创建并执行一条或多条SQL语句/*1.分配一个语句句柄(statement handle)2.创建SQL语句3.执行语句4.销毁语句*/retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1); //第一种方式/*//直接执行SQLExecDirect (hstmt1,sql1,39);char list[5];SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);SQLFetch(hstmt1);printf("%s\n",list);*///第二种方式/*//绑定参数方式char a[200]="aaa";SQLINTEGER p = SQL_NTS;//1.预编译SQLPrepare(hstmt1,sql2,35); //第三个参数与数组大小相同,而不是数据库列相同//2.绑定参数值SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);//3.执行SQLExecute(hstmt1);char list[5];SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);SQLFetch(hstmt1);printf("%s\n",list);*///第三种方式全部输出/*1.确认一个结果集是否可用。2.将结果集的列绑定在适当的变量上。3.取得行*///3.检查结果记录(如果有的话)SQLExecDirect (hstmt1,sql3,19);char list[5];SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);do{retcode = SQLFetch(hstmt1);if(retcode == SQL_NO_DATA){break;}printf("%s\n",list);}while(1);//释放语句句柄SQLCloseCursor (hstmt1);SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);} //4.断开数据源/*1.断开与数据源的连接.2.释放连接句柄.3.释放环境句柄 (如果不再需要在这个环境中作更多连接)*/SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(SQL_HANDLE_ENV, henv); return(0);
}
使用C语言来操作SQL SERVER数据库相关推荐
- 使用c语言操作sql server数据库
本文使用c语言来对sql server数据库进行操作,实现通过程序来对数据库进行增删改查操作. 操作系统:windows 10 实验平台:vs2012 + sql server 2 ...
- python3连接sql server数据库_Python3操作SQL Server数据库(实例讲解)
1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...
- C#操作SQL Server数据库
C#操作SQL Server数据库 1.概述 2.连接字符串的写法 3.SqlConnection对象 4.SqlCommand对象 5.SqlDataReader对象 6.DataSet对象 7.释 ...
- python调用sql数据库_Python3操作SQL Server数据库(实例讲解)
1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...
- Excel VBA通过ADO连接、操作SQL Server数据库的自定义函数
网上大多数有关VBA连接.操作SQL Server数据库的教程,大多是把连接字串.SQL语句.执行过程全写在一个过程中了,当一个VBA项目需要做大量的查询.更新数据时,显然这种方法并不合适,以下代码是 ...
- c++访问数据库代码示例 occi_使用Python操作SQL Server数据库
先说一下SQL Server 如果有条件可以使用远程连接或者TeamViewer等工具,操作带GUI的数据库管理器,实施起来可以很省心.可以直接查看结果,模板化查询甚至提示语句错误等. 如果是使用li ...
- Java操作SQL Server数据库
//首先导入sql server2008的jar包:sqljdbc4.jar,注意在一般的电脑上即使做了这样的操作仍然是吧不能连接上SQL Server 2008的,如果想连上SQL SQLSERVE ...
- VS2019 MFC ODBC 操作SQL SERVER 数据库
[注意] VS2019取消了之前老版本的SQL数据库向导.因此需要像VS2019以前版本一样操作数据库,就要单独写一个继承于CRecordset的类来完成向数据库添加数据.删除数据.更新数据.数据排序 ...
- CMD操作SQL Server数据库
connect 服务器是-S,登陆ID是-U,密码是-P 运行 osql -S [数据库服务器] -U [登陆用户名] -P [登陆密码] 出现 1> 表示连接成功,这时候你可以输入sql语句来 ...
最新文章
- 新闻更新php html,phphtml 新闻发布系统,运用php+mysql,里面包括数据库和php文件。 Other systems 其他 249万源代码下载- www.pudn.com...
- java runtime.exec 阻塞_关于Runtime.getRuntime().exec()产生阻塞的2个陷阱
- mysql 命令查看帮助_Mysql使用命令分级查找帮助
- ADC0832程序完整版 源码+Proteus仿真
- charles 中文_抓包工具--charles(青花瓷)及获取AppStore数据包
- java.util.zip.zipexception_Java 压缩zip异常,java.util.zip.ZipException: duplicate entry: 问题...
- CF313D Ilya and Roads(区间DP)
- 荣耀Magic 2 3D感光版来了,和苹果Face ID系统有何不同?
- Redis 通配符查找及批量删除key
- SpringMVC工作原理的介绍
- 增加项目报告功能,支持与TAPD、Jira、禅道双向同步缺陷,MeterSphere开源持续测试平台v1.15.0发布
- 遇到一个奇怪的问题——关于VS2013、VS2015中字符集(多字节字符集和Unicode字符集)的选择
- Linux命令详解之 cp
- Mac OS开发之icns文件
- 手机端h5唤起苹果地图
- 几种常见的概率统计谬误
- 好东西大家分享: 怎么画数据流图 1
- 恢复计算机到手机桌面,桌面的图标怎么恢复原来的呀?
- 微软漏洞被用于金融欺诈、VMware发布漏洞补丁|2月16日全球网络安全热点
- 微信小程序 解决圆形头像显示图片不完全问题