VS与SQL Sever(C语言操作数据库)

作者这里使用的是程序是:

Visual Studio SQL Sever

(1 对VS的操作

1.首先我们打开Visual Studio Installer,并以管理员身份运行

2.点击修改

3.先选择数据存储和处理,再在右方添加处理工具(如图设置)

最后在右下角选择修改(作者这里已经下载好了,所以右下角是关闭)

等待下载并安装完成

4.检查工作(可选)

创建新的空项目并在第一行写入**#include<sql.h>**

光标选择第一行,右键,选择转到文档

如上图则以上操作成功。

(2 对SQL Sever的操作

这里我们直接使用SQL Sever Management操作,不使用Poweshell操作(有图形化窗口管那么多干嘛,直接用!)

正常情况下SQL Sever的最高权限登录名是sa(这是安装时默认的),如果在安装时更改了,请使用更改的登录名,如果出现了不正常的情况,例如:密码忘了、更改的最高权限登录名忘了等等,作者的建议是,在排除没有比较重要的数据的情况下,卸了,重新安装。当然也可以使用Windows身份验证,这个作为附加等下说明。

1.登录

因为是初学,或者刚开始做C语言项目实践要求这类的项目(一般都是大学学计算机的朋友,你们的痛,我懂。)所以一般数据库只在本地进行操作,所以数据库名称选择设备名称(不知道设备名称的朋友请看下一张图)

身份验证使用SQL Sever 身份验证

登录名输入最高权限登录名,我的默认sa

密码,可选记住密码(比如我,因为是真没什么重要数据,属于是给狗看都摇头的地步)

最后连接

服务器名称:WIN+i打开设置

系统>系统信息>设备名称

2.搜索以管理员身份运行ODBC数据源

  1. 选择添加

4.双击打开SQL Sever

5.名称随便,描述可以不写,服务器千万别点向下的那个箭头,复制前面的设备名称

弄完后:

不要回车!不要回车!不要回车!直接点下一页

6.选择使用用户输入登录ID和密码的 SQL Sever 验证

方框打勾

登录ID输入你们的最高权限登录名(就是默认是sa的那个,这里的root只是我创建的第二个较高权限账户而已)

密码

7.直接下一页

8.划出来的看需要,我暂时不用,没有需要的话直接点完成

9.点击测试数据源

10.测试成功是这样(我的之前测试过,所以这次很快,如果失败了,就多试几次,可能会出现这样的情况。如果一直失败,就需要搜一下解决方法了,作者没有失败过,所以不知道怎么解决)

11.点击确认

检查是否多出来这样一行(1是作者输入的名称)

(3 完成建立数据库和表的操作

这里就不过多做介绍了,网上一搜一大堆,这里作者使用一下以前建立的数据库和表。

复制代码
create database 2024春
go

ues 2024春
go

create table test(
学号 varchar(20) not null primary key,
姓名 char(20) not null,
楼栋号 tinyint not null,
寝室号 smallint not null,
是否回寝 tinyint
)
go

然后我们随便插入一点数据进去

复制代码
insert into test values
('2001','张三',10,112,0),
('2003','李四',10,112,1),
('2024','王五',10,112,1)
go

(4 C语言操作数据库

上面那也不是数据库操作呀,别急。先建立一份新的cpp文件:

我们需要修改VS字符集:

项目>属性

配置属性>高级>字符集合

默认的是Unicode,将它修改成使用多字节字符集,不要忘记点应用

修改好后,代码如下,解释我放在注释中:

请**一定!一定!一定!**看完代码及注释,单纯将代码复制过去肯定报错,需要更改的地方我已在代码中注释说明。

复制代码
#include<stdio.h>
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
#include<sqltypes.h>

void query_all()
{
	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*)"数据", SQL_NTS, (SQLCHAR*)"root", SQL_NTS, (SQLCHAR*)"******", SQL_NTS);
/*这里就是ODBC配置"数据"是我起的名字,之前"1"那个不好听,我换了个名字
"root"就是配置ODBC时所用的登录名,"******"是密码,请根据自己的情况*/
	
	if (!(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO))
	{
		printf("error:连接失败!
");
	}

	ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

	SQLCHAR sql1[] = "use [2024春]"; //SQL语句选择数据库,我的数据库名字是[2024春]
	SQLCHAR sql2[] = "select * from test"; //SQL语句执行最简单的查询,test是表名
	ret = SQLExecDirect(hstmt, sql1, SQL_NTS);
	ret = SQLExecDirect(hstmt, sql2, SQL_NTS);
/*C语言操作数据库其实就是用C语言的函数,在其中嵌套SQL语句*/

	if (!(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO))
		printf("error:调用错误
");
	if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
	{
		printf("学号		姓名	楼栋号	寝室号	是否回寝
");
		SQLCHAR str1[50], str2[50], str3[50], str4[50], str5[50], str6[50];
		SQLLEN 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);
/*这里总共你建立表用了几列,你就用几次,比如我的表有(学号,姓名,楼栋号,寝室号,是否回寝)
总共5列,所以用了5次*/
			printf("%s	%s	%s	%s	%s
", str1, str2, str3, str4, str5);
		}
	}

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

int main()
{
	query_all();
}

我们之前插入的就显示出来了!你也可以自己再学习一些SQL语句,直接将上面代码中的SQL语句做替换,也就可以实现其他功能。

SQL语句可以先搜搜其他博主的文章,后续我也会写一篇关于SQL语句。

相关推荐
为何创造硅基生物8 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
仰泳之鹅9 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
星星也在雾里9 小时前
PgBouncer 解决 PostgreSQL 连接数超限 + 可视化监控
数据库·postgresql
jolimark9 小时前
C语言自学攻略:小白入门三步走
c语言·编程入门·学习路线·实践项目·自学攻略
cen__y10 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
社交怪人11 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
雨辰AI11 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
长城202411 小时前
关于MySql的ONLY_FULL_GROUP_BY问题
数据库·mysql·聚合列
常常有11 小时前
MySQL 底层执行原理:输入SQL语句到两阶段提交
数据库·sql·mysql
卢锡荣12 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设