原文:C语言与sqlserver数据库

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##########################

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4. #include <sql.h>
  5. #include <sqlext.h>
  6. #include <sqltypes.h>
  7. #include <odbcss.h>
  8. SQLHENV henv = SQL_NULL_HENV;
  9. SQLHDBC hdbc1 = SQL_NULL_HDBC;
  10. SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
  11. /*
  12. cpp文件功能说明:
  13. 1.数据库操作中的添加,修改,删除,主要体现在SQL语句上
  14. 2.采用直接执行方式和参数预编译执行方式两种
  15. */
  16. int main(){
  17. RETCODE retcode;
  18. UCHAR   szDSN[SQL_MAX_DSN_LENGTH+1]   =   "csql",
  19. szUID[MAXNAME]   =   "sa",
  20. szAuthStr[MAXNAME]   =   "";
  21. //SQL语句
  22. //直接SQL语句
  23. UCHAR   sql[37] = "insert into test values('aaa','100')";
  24. //预编译SQL语句
  25. UCHAR   pre_sql[29] = "insert into test values(?,?)";
  26. //1.连接数据源
  27. //1.环境句柄
  28. retcode   =   SQLAllocHandle   (SQL_HANDLE_ENV,   NULL,   &henv);
  29. retcode   =   SQLSetEnvAttr(henv,   SQL_ATTR_ODBC_VERSION,
  30. (SQLPOINTER)SQL_OV_ODBC3,
  31. SQL_IS_INTEGER);
  32. //2.连接句柄
  33. retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);
  34. retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);
  35. //判断连接是否成功
  36. if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   )   {
  37. printf("连接失败!/n");
  38. }   else   {
  39. //2.创建并执行一条或多条SQL语句
  40. /*
  41. 1.分配一个语句句柄(statement handle)
  42. 2.创建SQL语句
  43. 3.执行语句
  44. 4.销毁语句
  45. */
  46. retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);
  47. //第一种方式
  48. //直接执行
  49. //添加操作
  50. //SQLExecDirect (hstmt1,sql,37);
  51. //第二种方式
  52. //绑定参数方式
  53. char a[200]="bbb";
  54. char b[200]="200";
  55. SQLINTEGER   p   =   SQL_NTS;
  56. //1预编译
  57. SQLPrepare(hstmt1,pre_sql,29); //第三个参数与数组大小相同,而不是数据库列相同
  58. //2绑定参数值
  59. SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);
  60. SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);
  61. //3 执行
  62. SQLExecute(hstmt1);
  63. printf("操作成功!");
  64. //释放语句句柄
  65. SQLCloseCursor (hstmt1);
  66. SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);
  67. }
  68. //3.断开数据源
  69. /*
  70. 1.断开与数据源的连接.
  71. 2.释放连接句柄.
  72. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接)
  73. */
  74. SQLDisconnect(hdbc1);
  75. SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
  76. SQLFreeHandle(SQL_HANDLE_ENV, henv);
  77. return(0);
  78. }
#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##########################

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4. #include <sql.h>
  5. #include <sqlext.h>
  6. #include <sqltypes.h>
  7. #include <odbcss.h>
  8. SQLHENV henv = SQL_NULL_HENV;
  9. SQLHDBC hdbc1 = SQL_NULL_HDBC;
  10. SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
  11. /*
  12. 查询SQLSERVER数据库,1.条件查询,2.直接查询全部
  13. */
  14. int main(){
  15. RETCODE retcode;
  16. UCHAR   szDSN[SQL_MAX_DSN_LENGTH+1]   =   "csql",
  17. szUID[MAXNAME]   =   "sa",
  18. szAuthStr[MAXNAME]   =   "";
  19. UCHAR   sql1[39] = "select b from test where a = 'aaa'";
  20. UCHAR   sql2[35] = "select b from test where a = ? ";
  21. UCHAR   sql3[19] = "select b from test";
  22. retcode   =   SQLAllocHandle   (SQL_HANDLE_ENV,   NULL,   &henv);
  23. retcode   =   SQLSetEnvAttr(henv,   SQL_ATTR_ODBC_VERSION,
  24. (SQLPOINTER)SQL_OV_ODBC3,
  25. SQL_IS_INTEGER);
  26. retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);
  27. //1.连接数据源
  28. retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);
  29. if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   )   {
  30. printf("连接失败!");
  31. }   else   {
  32. //2.创建并执行一条或多条SQL语句
  33. /*
  34. 1.分配一个语句句柄(statement handle)
  35. 2.创建SQL语句
  36. 3.执行语句
  37. 4.销毁语句
  38. */
  39. retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);
  40. //第一种方式
  41. /*
  42. //直接执行
  43. SQLExecDirect (hstmt1,sql1,39);
  44. char list[5];
  45. SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
  46. SQLFetch(hstmt1);
  47. printf("%s/n",list);
  48. */
  49. //第二种方式
  50. /*
  51. //绑定参数方式
  52. char a[200]="aaa";
  53. SQLINTEGER   p   =   SQL_NTS;
  54. //1.预编译
  55. SQLPrepare(hstmt1,sql2,35); //第三个参数与数组大小相同,而不是数据库列相同
  56. //2.绑定参数值
  57. SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);
  58. //3.执行
  59. SQLExecute(hstmt1);
  60. char list[5];
  61. SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
  62. SQLFetch(hstmt1);
  63. printf("%s/n",list);
  64. */
  65. //第三种方式全部输出
  66. /*
  67. 1.确认一个结果集是否可用。
  68. 2.将结果集的列绑定在适当的变量上。
  69. 3.取得行
  70. */
  71. //3.检查结果记录(如果有的话)
  72. SQLExecDirect (hstmt1,sql3,19);
  73. char list[5];
  74. SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
  75. do{
  76. retcode = SQLFetch(hstmt1);
  77. if(retcode == SQL_NO_DATA){
  78. break;
  79. }
  80. printf("%s/n",list);
  81. }while(1);
  82. //释放语句句柄
  83. SQLCloseCursor (hstmt1);
  84. SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);
  85. }
  86. //4.断开数据源
  87. /*
  88. 1.断开与数据源的连接.
  89. 2.释放连接句柄.
  90. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接)
  91. */
  92. SQLDisconnect(hdbc1);
  93. SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
  94. SQLFreeHandle(SQL_HANDLE_ENV, henv);
  95. return(0);
  96. }
#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);
}

3.总结:ODBC数据库操作与JDBC步骤上类似,可以融汇贯通来学习

本文来自于http://simpledev.javaeye.com/blog/339537

C语言与sqlserver数据库的更多相关文章

  1. Linux C语言连接 sqlserver数据库

    记录一下Linux下使用C语言连接sqlserver的方法. 连接前需要安装freetds. 参考: http://www.cnblogs.com/helloworldtoyou/p/6910075. ...

  2. C语言连接SQLSERVER数据库

    第一步:配置ODBC.在配置ODBC时有用户DSN.系统DSN.和文件DSN三种方法,为了稳妥起见,采用系统DSN. DSN的名字叫LocalServer,帐号:sa,密码123456 第二步:打开V ...

  3. 【转载】微软官方提供的Sqlserver数据库操作帮助类SQLHelper类

    在.NET平台中,C#语言一般使用ADO.NET组件来操作Sqlserver数据库,通过ADO.NET组件可以实现连接数据库.查询数据集.执行SQL语句以及关闭数据库连接等操作,为此网上有很多开发者自 ...

  4. 动态备份SQL-SERVER数据库——SQLDMO

    转载:http://www.cnblogs.com/liulanglang/archive/2007/12/04/981812.html 上周要写一个SQL-SERVER数据库备份还原的程序,很没有思 ...

  5. PowerDesigner从SqlServer数据库中导入实体模型

    PowerDesigner从SqlServer数据库中导入实体模型 时间 2013-06-28 10:26:34 CSDN博客 原文  http://blog.csdn.net/sxycxwb/art ...

  6. 批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor

    批量解密SQLSERVER数据库中的各种对象的工具dbForge SQL Decryptor2.1.11 之前写过一篇文章,使用redgate公司的SQL PROMPT工具,但是不太方便 SQLPRO ...

  7. JAVA使用JDBC技术操作SqlServer数据库执行存储过程

    Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...

  8. SQLServer数据库监控代码

    SQLServer数据库监控代码: creation_time, total_worker_time, last_worker_time, max_worker_time, min_worker_ti ...

  9. SQLServer数据库转换成MySQL数据库

    由于工作需要,系统原先的SQLServer数据库要转换成MYSQL数据库,所以这两天就一直在查阅这方面的资料.最开始,我尝试从SQLServer中导出SQL文件,然后导入到MYSQL数据库中,发现报错 ...

随机推荐

  1. 第四-generation音频:互联网智能声音会火

    我把声音分成四个年龄:传统的立体声插头线-蓝牙音响-wifi发出声音-智能声音. 传统的立体声插头线:传统的声音,您必须使用电缆和其他输入源.这样的声音是现在市场上最流行的音频上. 蓝牙音响:蓝牙无线 ...

  2. SDI接口

    SDI接口,是"数字分量串行接口". SDI接口是数字分量串行接口(serial digital interface)的首字母缩写. 1简单介绍编辑 SDI接口是一种"数 ...

  3. android adb 不同的方式使用特定的解释

    本文介绍windows 在程序中使用adb 方法.没有引进adb 该命令. 1) 启动adb 流程.获得输出从管道. 这样的方式的弊端有多少,我也不知道.反正就是各种问题吧.可是眼下我问过非常多朋友. ...

  4. Kafka logo分布式发布订阅消息系统 Kafka

    分布式发布订阅消息系统 Kafka kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳 ...

  5. html不常见问题汇总

    写html已经好长一段时间了,也遇到了不少问题,跟大家分享下 form是不可以嵌套的 说明:如果嵌套会有很多问题 但是可以并列 <html> <head> </head& ...

  6. mahout安装和测试

    Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发者更加方便快捷地创建智能应用程序.Apac ...

  7. 024找到二维阵列(keep it up)

    剑指offer在标题中:http://ac.jobdu.com/problem.php? pid=1384 题目描写叙述: 在一个二维数组中,每一行都依照从左到右递增的顺序排序.每一列都依照从上到下递 ...

  8. 【C++ Primer每天刷牙】一间 迭代器

    迭代器的介绍 概述 迭代器是一种检查容器内元素并遍历元素的数据类型. 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或所有元素,每一个迭代器对象代表容器中的确定的地址.迭代 ...

  9. UC浏览器插件开发

    pip install UC浏览器插件是个什么玩意? 如图所看到的,便是UC的插件面板. UC通过开放浏览器插件api, 使开发人员可以进行插件的开发. 插件种类: 1 : extension. 就是 ...

  10. j2se--Socket沟通

    第一次接触Socket课程设计大二,我在做一个图书馆管理系统.源代码是从互联网上下载,代码天天磨,隐约中记得有Socket这么一个单词. 第二次是去年代表学校參加"河北省电子信息职业技能大赛 ...