C语言中操作sqlserver数据库案例教程

作者:uestclr 时间:2024-01-24 17:47:32 

本文使用c语言来对sql server数据库进行操作,实现通过程序来对数据库进行增删改查操作。

操作系统:windows 10         实验平台:vs2012  +  sql server 2008

ODBC简介:开放数据库连接(Open Database Connectivity,ODBC),主要的功能是提供了一组用于数据库访问的编程接口,其主要的特点是,如果应用程序使用ODBC做数据源,那么这个应用程序与所使用的数据库或数据库引擎是无关的,为应用程序的跨平台和可移植奠定了基础。

创建ODBC数据源:控制面板——管理工具——ODBC数据源(32位)

C语言中操作sqlserver数据库案例教程

可以看到,这里存在三种类型的DSN(数据源名),其中:

用户DSN:只允创建该DSN的用户使用该数据源;

系统DSN:所有登陆该服务器的用户都能使用该数据源;

文件DSN:配置信息保存在文件中,所有登陆的用户均可使用;

在本实验中,采用系统DSN:

点击添加,然后选择SQL Server

C语言中操作sqlserver数据库案例教程

然后输入数据源的名称和所在服务器,我们的数据库是安装在本机上的。

C语言中操作sqlserver数据库案例教程

选择以sql server用户的方式进行验证,下图所示:

C语言中操作sqlserver数据库案例教程

这里可以设置默认连接的数据库,保持不变,使用master作为默认的数据库。

C语言中操作sqlserver数据库案例教程

然后点击下一步,然后完成,完成后可以测试一下。

C语言中操作sqlserver数据库案例教程

这就完成了ODBC数据源的创建。

程序测试,数据库中已包含一个叫做stu_info的数据库,且其中有一张student的学生信息表,其包含的字段信息如下:

C语言中操作sqlserver数据库案例教程

程序设计如下


#include<stdio.h>
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
#include<sqltypes.h>
int main()
{
SQLRETURN ret;
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;

ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申请环境句柄
ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申请数据库连接句柄

ret=SQLConnect(hdbc,(SQLCHAR*)"data_test",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"12345678",SQL_NTS);
/*data_test为配置的ODBC数据源名称,这里根据自己的配置进行修改*/
   if(!(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO))
{
printf("连接数据库失败!\n");
return -1;
}

ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
/*执行sql语句*/
SQLCHAR sql1[]="use stu_info";
SQLCHAR sql2[]="select * from student";
ret=SQLExecDirect(hstmt,sql1,SQL_NTS);
ret=SQLExecDirect(hstmt,sql2,SQL_NTS);
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
{
SQLCHAR str1[50],str2[50],str3[50],str4[50],str5[50],str6[50];
SQLINTEGER len_str1, len_str2, len_str3, len_str4, len_str5, len_str6;
while(SQLFetch(hstmt)!=SQL_NO_DATA)
{
SQLGetData(hstmt,1,SQL_C_CHAR,str1,50,&len_str1);   //获取第一列数据
SQLGetData(hstmt,2,SQL_C_CHAR,str2,50,&len_str2);
SQLGetData(hstmt,3,SQL_C_CHAR,str3,50,&len_str3);
SQLGetData(hstmt,4,SQL_C_CHAR,str4,50,&len_str4);
SQLGetData(hstmt,5,SQL_C_CHAR,str5,50,&len_str5);
SQLGetData(hstmt,6,SQL_C_CHAR,str6,50,&len_str6);
printf("%s\t%s\t%s\t%s\t%s\t%s\n",str1,str2,str3,str4,str5,str6);
}
}

SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄
SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄
return 0;
}

需要说明的是,在多数环境中,代码会报错,报错信息如下:(SQLCHAR*)无法与(SQLWCHAR*)兼容,于是有人可能会想到,直接强转为(SQLWCHAR*),但是依然在SQLConnect函数处报错,无法连接上数据库,这时需要修改字符集,配置为多字节字符集,操作如下:

C语言中操作sqlserver数据库案例教程

来源:https://blog.csdn.net/uestclr/article/details/99961835

标签:C语言,sqlserver,数据库
0
投稿

猜你喜欢

  • 基于Python Dash库制作酷炫的可视化大屏

    2022-09-13 14:20:32
  • python 判断字符串中是否含有汉字或非汉字的实例

    2022-07-01 11:25:59
  • python列表每个元素同增同减和列表元素去空格的实例

    2022-11-04 21:15:34
  • python利用beautifulSoup实现爬虫

    2022-05-17 21:10:34
  • 如何用vue实现网页截图你知道吗

    2024-04-27 15:51:31
  • Windows下MySQL详细安装过程及基本使用

    2024-01-27 10:31:16
  • 浅析SQL Server 2008企业级新特性

    2008-11-24 17:01:00
  • pandas dataframe添加表格框线输出的方法

    2021-11-28 01:34:41
  • ASP获取网页内容(解决乱码问题)

    2009-07-26 10:44:00
  • 用Python从零实现贝叶斯分类器的机器学习的教程

    2021-02-21 05:14:27
  • asp 类型转换函数大全第1/2页

    2011-04-07 11:06:00
  • php获取qq用户昵称和在线状态(实例分析)

    2023-11-14 11:19:22
  • Python实现arctan换算角度的示例

    2023-07-16 20:31:28
  • Python3结合Dlib实现人脸识别和剪切

    2023-01-10 01:28:48
  • Vue3初探之ref、reactive以及改变数组的值

    2024-04-27 16:06:00
  • win2003 Server配置SQL Server 2005远程连接的方法

    2024-01-17 10:09:06
  • 如何让python的运行速度得到提升

    2023-04-26 21:48:35
  • 浅析Python 抽象工厂模式的优缺点

    2021-08-12 01:33:17
  • MySQL复制的概述、安装、故障、技巧、工具(火丁分享)

    2024-01-18 02:29:49
  • Python定义函数时参数有默认值问题解决

    2023-02-10 21:58:49
  • asp之家 网络编程 m.aspxhome.com