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

相关推荐
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
祈安_3 天前
C语言内存函数
c语言·后端
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip