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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-07-20

SQLServer2019 数据库环境搭建与使用的实现

目录 一.SQL Server 数据库概述 二.安装 SQL Server 2019 2.1 SQL Server 2019 安装必备条件 2.2 下载 SQL Server 2019 安装引导文件 2.3 下载 SQL Server 2019 安装文件 2.4 安装 SQL Server 2019 数据库 2.5 安装 SQL Server Management Studio 管理工具 2.6 启动 SQLServer 管理工具 数据库,顾名思义,就是一个存储数据的大仓库,涵盖了多个方面的知识

sqlserver主键自增的实现示例

建表,主键自增 create table aaa( id bigint identity(1,1) not null PRIMARY key, name nvarchar(255) ); navicat没办法给主键列,加identity,只能用sql建表 赋值时,identity列不能赋值,报错 一.identity的基本用法 1.含义 identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错 2.语法 列名 数据类型

SqlServer 垂直分表(减少程序改动)

由于sqlserver的设计特殊性,一般大量数据一般都是采用水平分表,而垂直分表只是把text.图片都较大数据放到单独的表中,这样数据设计会更合理,相对于mysql可能要好一点,mssql本来就是一个文件,基本上提升不大,目前来看几十万的数据没有分不分表没有任何影响,对于千万以上数据还是采用水平分表比较好. 而 垂直分表 则相对很少见到和用到,因为这可能是数据库设计上的问题了.如果数据库中一张表有部分字段几乎从不不更改但经常查询,而部分字段的数据频繁更改,这种设计放到同一个表中就不合理了,相互影

SQLServer2019配置端口号的实现

第一次写博客,实属心血来潮.为什么要写这篇博客呢?原因如下 1.有一次我想配置数据库端口号时,找不到对应的解决方案 2.是时候有个地方可以记录一下自己做过的事情了,到时候想翻看的时候可以翻看 好了,废话不多说,直接上解决方案. 我这里呢以SQLServer2019作为示例. 第一步:打开Sql Server Configuration Manager -> SQL Server 网络配置 -> MSSQLSERVER2019(这个名称是在安装时自己输入的)-> TCP/IP 第二步:右键

sqlserver2017共享功能目录路径不可改的解决方法

注意:什么路径不可改就搜索该路径进行删除注册表记录,然后重启电脑 按 win键盘+R输入 regedit 进去注册表,点击计算机按"编辑"-->查找下一个 需要等一些时间 结果出来后把搜到的结果的项删除 删除之后  按F3继续查找下一个进行删除,删除直到搜索完毕 然后把原来安装的注册表记录查找出来删除: 把含有Microsoft SQL Server字样的都删除 删除完这个再按F3查找下一个删除 删除直到按F3显示搜索完毕 接着再搜索删除记录  MSSQL 直按F3删除到显示搜索

SQLServer2019 数据库的基本使用之图形化界面操作的实现

目录 一.数据库.表的创建与删除 1. 创建数据库 2. 修改数据库 3. 删除数据库 4. 创建数据表 5. 删除数据表 二.数据表常见操作 1. 在表结构中添加新字段 2. 在表结构中删除字段 3. 数据表更名 三.数据的增删改查 1. 数据准备 2. 添加数据 3. 删除数据 4. 修改数据 5. 查看数据 四.数据库常用操作 1. 分离数据库 2. 附加数据库 3. 执行脚本 五.创建查询和测试查询 一.数据库.表的创建与删除 1. 创建数据库 使用可视化管理工具是创建 SQL Serv

SQLServer 日期函数大全(小结)

一.统计语句 1.--统计当前[>当天00点以后的数据] SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111) ORDER BY dateandtime DESC 2.--统计本周 SELECT * FROM 表 WHERE datediff(week,[dateadd],getdate())=0 3.--统计本月 SELECT * FROM 表 WHERE da

SQLServer2008提示评估期已过解决方案

打开sqlserver时提示评估期已过 解决方法: 打开sqlserver安装中心(注意:选择R2的安装中心) 选择版本升级 中途可能会出现需要重启计算机,那么请重启计算机后在进行以上操作 点击确定,然后进行下一步,直到需要输入密钥 SQL Server 2008 Developer(开发版):PTTFM-X467G-P7RH2-3Q6CG-4DMYB SQL Server 2008 Enterprise(企业版):JD8Y6-HQG69-P9H84-XDTPG-34MBB 继续进行下一步,直到

SQL Server 2008 评估期已过怎么解决

SQL Server 2008有180天的试用期,过期后会提示"评估期已过"的提示. 1.进入SQL Server安装中心: 2.选择"维护"-"版本升级" 3.输入密钥: 其他的根据提示操作. 附SQL Server序列号: 开发版: PTTFM-X467G-P7RH2-3Q6CG-4DMYB 企业版: JD8Y6-HQG69-P9H84-XDTPG-34MBB 如果以上操作后还提示评估期已过,修改注册表: KEY_LOCAL_MACHINE\

使用 SQL 服务器时,"评估期已过期"错误消息(解决方法)

当打开sql server2008企业管理器的时候,出现报错"评估期已过.有关如何升级的测试版软件的信息....." 修改注册表:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/100/ConfigurationState里的 CommonFiles 值改成 3 进入SQL2008配置工具中的安装中心 再进入维护界面,选择版本升级 进入产品密钥,输入密钥JD8Y6-HQG69-P9H84-XDTPG-34MBB 一直

SQL Server评估期已过问题的解决方法

但是,当自己打开之前敲的系统时,总是报错,无法进行.经过检查发现,原来是自己的数据库出现了问题,无法连接到数据库了.打开Sql Server2008,总是报这样的错误提示: 问题出现了,就得解决,于是开始上网查找信息.还真找到了相关的解决办法,跟着步骤一步步的进行,但是还是无法修复.这下可让我着急了,因为装SQL server是一件很麻烦的事情,还要将之前的卸载干净,有的人因为卸载不净而重装系统.不过还好,在多方搜索之后找到了解决办法. 解决方法:打开配置工具--sql server安装中心 选

sql2008评估期已过的解决办法及序列号

操作如下:(1)将SQL安装光盘(或者ISO)放进去运行,进入安装界面. (也可进入开始>程序>Microsoft SQL Server 2008>配置工具>SQL Server 安装中心)(2)选择"维护"中的"版本升级",(3)按照版本升级的向导,先输入产品密钥,也就是正式企业版的序列号:(4)然后选择要升级的数据库实例,当然这里虚拟机中只有一个实例所以也不用选择了,一直进行向导的"下一步",最后点击"升级&

Java提示解析时已到达文件结尾的解决方法

Java提示解析时已到达文件结尾怎么办?这里我们将给大家介绍详细的解决方法. 首先,找到已经编写好的文件,运行,看到控制台,给出如下提示. 向下查看控制台,看到控制台,给出如下提示. 接着,找到文件所在行,进行检查,检查该处是否有什么错误. 如果第二步没有检查到任何的错误,那么就是上个class类处出现了问题.向上一个类检查,就一定可以发现问题,主要是因为,解析时已到达文件结尾,是因为,在后一个类已经执行了,程序还没有结束. 然后,将第一类中却上的结尾符号"}"添加上,再次运行,发现程

sql server 2008数据库无法启动的解决办法(图文教程)

事故起因: 之前使用SQL Server2008+VS2010开发,安装VS2012后数据库忽然无法连接 发现SQL Server配置管理器显示远程过程调试失败 原因&对策: VS2012中自带的Local DB和Server2008冲突 在添加和删除程序中删除"Microsoft SQL Server 2012Local DB"后问题应该解决 祸不单行: 远程过程调试失败后出现了"请求失败或服务未及时响应",服务仍旧无法启动 数据库服务无法启动的常见原因:

AndroidStudio构建项目提示错误信息“unable to find valid certification”的完美解决方案

手抖了一下,把AS升级到了最新版本,然后就悲剧了,公司的项目跑不起来,提示"unable to find valid certification",新建项目也是一样的提示.之前总结的解决方案都用了,没一个好使的,经过两个下午的折腾,终于还是被我整好了,感动的泪水都要流出来了 (╥╯^╰╥) 直接放我的最新解决方案,look~ 第一步:如下所示,在项目的build.gradle的两个repositories中添加阿里public镜像,最好放在google() 前面: buildscrip

JSP页面IE无法打开Internet 站点…… 已终止操作 的解决方法

之所以说机缘巧合,意思是各种因素促成了这个事件,缺一不可.几个因素分别是:系统中的ie是ie6(具体的小版本之间的差别我不是很确定or清楚).编写jsp页面且用开发工具自动生成的jsp源码.使用了WdatePicker.js这个时间控件.以及页面代码的一些书写顺序. 之所以说经典,很明显,从上面的巧合中可以看出来了,ie6绝对是经典了. 全部测试代码如下(除要引用的控件相关文件外) 复制代码 代码如下: <%@ page language="java" import="

Android 实现电话拦截及拦截提示音功能的开发

本文所讲的内容是在Android系统中如何写程序进行电话拦截,并发出拦截提示音提醒用户,可以说此功能还是比较实用的.        1.电话拦截 这个功能大家可能都知道了,就是利用反射原理调用ITelephony的隐藏方法来实现.        2.拦截后提示忙音/空号/已关机/已停机 这个功能其实是要用到MMI指令,具体如何设置呼叫转移的指定可以参考这里 http://baike.baidu.com/view/206402.html?fromTaglist. 在本文中我们会用到"遇忙转移&qu

简单了解C++常见编程问题解决方案

电脑配置:window10, 64位操作系统,基于x64的处理器,Microsoft Visual Studio Community 2019Version 16.4.5 问题1:Unhandled exception at 0x00007FFDB39AA839 in TesseractLACadd1.exe: Microsoft C++ exception: boost::filesystem::filesystem_error at memory location 0x000000EAFAB