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语句。

相关推荐
island1314几秒前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
玄同7659 分钟前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码10 分钟前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean12 分钟前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
小Tomkk31 分钟前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
qq_12498707531 小时前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
Once_day1 小时前
C++之《程序员自我修养》读书总结(1)
c语言·开发语言·c++·程序员自我修养
倒流时光三十年1 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
坚果派·白晓明2 小时前
在鸿蒙设备上快速验证由lycium工具快速交叉编译的C/C++三方库
c语言·c++·harmonyos·鸿蒙·编程语言·openharmony·三方库