本文转自
                        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##########################

C++代码  
  1. #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##########################

C代码  

#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数据库相关推荐

  1. 使用c语言操作sql server数据库

    本文使用c语言来对sql server数据库进行操作,实现通过程序来对数据库进行增删改查操作. 操作系统:windows 10         实验平台:vs2012  +  sql server 2 ...

  2. python3连接sql server数据库_Python3操作SQL Server数据库(实例讲解)

    1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...

  3. C#操作SQL Server数据库

    C#操作SQL Server数据库 1.概述 2.连接字符串的写法 3.SqlConnection对象 4.SqlCommand对象 5.SqlDataReader对象 6.DataSet对象 7.释 ...

  4. python调用sql数据库_Python3操作SQL Server数据库(实例讲解)

    1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...

  5. Excel VBA通过ADO连接、操作SQL Server数据库的自定义函数

    网上大多数有关VBA连接.操作SQL Server数据库的教程,大多是把连接字串.SQL语句.执行过程全写在一个过程中了,当一个VBA项目需要做大量的查询.更新数据时,显然这种方法并不合适,以下代码是 ...

  6. c++访问数据库代码示例 occi_使用Python操作SQL Server数据库

    先说一下SQL Server 如果有条件可以使用远程连接或者TeamViewer等工具,操作带GUI的数据库管理器,实施起来可以很省心.可以直接查看结果,模板化查询甚至提示语句错误等. 如果是使用li ...

  7. Java操作SQL Server数据库

    //首先导入sql server2008的jar包:sqljdbc4.jar,注意在一般的电脑上即使做了这样的操作仍然是吧不能连接上SQL Server 2008的,如果想连上SQL SQLSERVE ...

  8. VS2019 MFC ODBC 操作SQL SERVER 数据库

    [注意] VS2019取消了之前老版本的SQL数据库向导.因此需要像VS2019以前版本一样操作数据库,就要单独写一个继承于CRecordset的类来完成向数据库添加数据.删除数据.更新数据.数据排序 ...

  9. CMD操作SQL Server数据库

    connect 服务器是-S,登陆ID是-U,密码是-P 运行 osql -S [数据库服务器] -U [登陆用户名] -P [登陆密码] 出现 1> 表示连接成功,这时候你可以输入sql语句来 ...

最新文章

  1. 新闻更新php html,phphtml 新闻发布系统,运用php+mysql,里面包括数据库和php文件。 Other systems 其他 249万源代码下载- www.pudn.com...
  2. java runtime.exec 阻塞_关于Runtime.getRuntime().exec()产生阻塞的2个陷阱
  3. mysql 命令查看帮助_Mysql使用命令分级查找帮助
  4. ADC0832程序完整版 源码+Proteus仿真
  5. charles 中文_抓包工具--charles(青花瓷)及获取AppStore数据包
  6. java.util.zip.zipexception_Java 压缩zip异常,java.util.zip.ZipException: duplicate entry: 问题...
  7. CF313D Ilya and Roads(区间DP)
  8. 荣耀Magic 2 3D感光版来了,和苹果Face ID系统有何不同?
  9. Redis 通配符查找及批量删除key
  10. SpringMVC工作原理的介绍
  11. 增加项目报告功能,支持与TAPD、Jira、禅道双向同步缺陷,MeterSphere开源持续测试平台v1.15.0发布
  12. 遇到一个奇怪的问题——关于VS2013、VS2015中字符集(多字节字符集和Unicode字符集)的选择
  13. Linux命令详解之 cp
  14. Mac OS开发之icns文件
  15. 手机端h5唤起苹果地图
  16. 几种常见的概率统计谬误
  17. 好东西大家分享: 怎么画数据流图 1
  18. 恢复计算机到手机桌面,桌面的图标怎么恢复原来的呀?
  19. 微软漏洞被用于金融欺诈、VMware发布漏洞补丁|2月16日全球网络安全热点
  20. 微信小程序 解决圆形头像显示图片不完全问题

热门文章

  1. Ubuntu18.04下安装openfoam的一种方法
  2. 区块链倪老师:《区块链思维》第一章
  3. 内存溢出几种常见的错误
  4. 哪个x系列服务器主板是itx,华擎发布X570 ITX迷你服务器主板:两个Intel万兆网卡...
  5. String 类型 常用方法:
  6. AI网络之最简编写方法:autokeras
  7. 程序员如何花式赚外快?
  8. 马虎员工公厕遗失重要文件崩溃大哭,菜鸟裹裹和高德地图立功找回
  9. 实战 - 谷粒商城项目:基础篇First
  10. 中微区块链集团美国运营中心总裁Angle受邀全球区块链赋能峰会