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数据源
3. 选择添加
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:连接失败!\n");
}
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:调用错误\n");
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
printf("学号\t\t姓名\t楼栋号\t寝室号\t是否回寝\n");
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\t%s\t%s\t%s\t%s\n", str1, str2, str3, str4, str5);
}
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接
SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境
}
int main()
{
query_all();
}
我们之前插入的就显示出来了!你也可以自己再学习一些SQL语句,直接将上面代码中的SQL语句做替换,也就可以实现其他功能。
SQL语句可以先搜搜其他博主的文章,后续我也会写一篇关于SQL语句。