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位)
可以看到,这里存在三种类型的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函数处报错,无法连接上数据库,这时需要修改字符集,配置为多字节字符集,操作如下:
来源:https://blog.csdn.net/uestclr/article/details/99961835


猜你喜欢
- 给明文密码加密的流程:import base64pwd_after_encrypt = base64.b64encode(b'thi
- 前言在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤一般地,我们去网上批量打开壁纸的时候一般操作如下:1、打开壁纸网页2、
- 运行效果:完整代码from tkinter import *import tkinter.messageboximport base64fr
- 这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙伴们可以参考一下项目源码展示:'
- 本文详细分析了Yii框架的登录流程。分享给大家供大家参考。具体分析如下:Yii对于新手来说上手有点难度,特别是关于session,cooki
- 首先,如果以前安装的话,要删除干净。我也找了
- 本文实例讲述了Go语言算法之寻找数组第二大元素的方法。分享给大家供大家参考。具体如下:该算法的原理是,在遍历数组的时,始终记录当前最大的元素
- 前言:Selenium 支持 Web 浏览器的自动化,它提供一套测试函数,用于支持 Web 自动化测试。函数非常灵活,能够完成界面元素定位、
- http通过StreamingHttpResponse完成连续的数据传输长链接问题http服务之间传递结果流一个由flask封装起来的算法,
- 启动sql server Net Start MSSqlServer 暂停sql server Net Pause MSSqlServer
- 一、拉格朗日的基本思想拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。许多实际问题中都用
- 废话不多说,直接上代码!# coding:utf-8from multiprocessing import Poolimport timed
- 我想大多数的人在编写ASP程序的时候,都碰到过类似的错误信息: Error Num
- 前端开发环境多数基于Node.js,好处不多说了。但与使用Visual Studio开发的后端Asp.Net Core项目一起调试,却不是很
- javascript cookie的基本操作(添加和删除)1.添加一个cookie:response.addCookie(Cookie c)
- 从而达到方便快捷的目的,但是它在存储信息的时候往往会有一些敏感的东西,这些东西可能成为被攻击的目标,如银行的账号、信用卡事务或档案记录等。这
- 1.事件简介事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理
- step 1:perpar database & datause mastergoCreate database Inventory
- 为什么要做这个?mock 第三方服务时,需要使用,另外包括自身开发,有时也会用到python#!/usr/bin/env python2#
- MVC设计模式MVC (Model-View-Controller) 是软件工程中常用的软件架构模式,它是一种分离业务逻辑与显示界面的设计方