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

 更新时间:2021年07月22日 09:20:23   作者:uestclr  
这篇文章主要介绍了C语言中操作sqlserver数据库案例教程,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

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

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

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

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

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

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

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

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

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

点击添加,然后选择SQL Server

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

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

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

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

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

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

程序设计如下

#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数据库案例教程的文章就介绍到这了,更多相关C语言操作sqlserver内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于C++写一个推箱子小游戏

    基于C++写一个推箱子小游戏

    这篇文章主要为大家详细介绍了基于C++写一个推箱子小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-09-09
  • 详解C++的静态内存分配与动态内存分配

    详解C++的静态内存分配与动态内存分配

    内存分配 (Memory Allocation) 是指为计算机程序或服务分配物理内存空间或虚拟内存空间的一个过程,本文主要介绍了C++的静态内存分配与动态内存分配,感兴趣的同学可以参考阅读
    2023-06-06
  • 一文带你深入了解C++中的类型转换

    一文带你深入了解C++中的类型转换

    在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化。本文主要介绍了C++中常见的四个类型转换,需要的可以参考一下
    2022-12-12
  • C语言Turbo C下实现俄罗斯方块

    C语言Turbo C下实现俄罗斯方块

    这篇文章主要为大家详细介绍了C语言Turbo C下写的俄罗斯方块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • C语言实现洗牌与发牌游戏

    C语言实现洗牌与发牌游戏

    这篇文章主要为大家详细介绍了C语言洗牌与发牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • clion最新激活码+汉化的步骤详解(亲测可用激活到2089)

    clion最新激活码+汉化的步骤详解(亲测可用激活到2089)

    这篇文章主要介绍了clion最新版下载安装+破解+汉化的步骤详解,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • c++ vector造成的内存泄漏问题

    c++ vector造成的内存泄漏问题

    这篇文章主要介绍了c++ vector造成的内存泄漏问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C/C++ 实现递归和栈逆序字符串的实例

    C/C++ 实现递归和栈逆序字符串的实例

    这篇文章主要介绍了C/C++ 实现递归和栈逆序字符串的实例的相关资料,这里提供实例代码帮助大家学习掌握,需要的朋友可以参考下
    2017-08-08
  • QT实现视频传输功能

    QT实现视频传输功能

    这篇文章主要为大家详细介绍了QT实现视频传输功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C语言求矩阵主对角线元素及副对角线元素之和

    C语言求矩阵主对角线元素及副对角线元素之和

    这篇文章主要介绍了C语言求矩阵主对角线元素及副对角线元素之和实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论