当前位置 博文首页 > 吴斌的博客:ODBC连接Sql Server和VS2019的图书管理系统

    吴斌的博客:ODBC连接Sql Server和VS2019的图书管理系统

    作者:[db:作者] 时间:2021-06-28 09:17

    应用工具:ODBC数据源、Sql Server、VS2019

    关于ODBC的配置和介绍不再赘述,网上教程很多。

    好! 直接上源代码。

    连接.h

    #pragma once
    #include<stdio.h>
    #include<windows.h>
    #include<sql.h>
    #include<sqlext.h>
    #include<sqltypes.h>
    #include<string.h>
    char Account[50], Password[50], a[50], p[50];
    SQLRETURN   ret;
    SQLHENV    henv;
    SQLHDBC    hdbc;
    SQLHSTMT  hstmt;
    void lianjie()
    {
    	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*)"wb", SQL_NTS, (SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"123456", SQL_NTS);
    	/*data_test为配置的ODBC数据源名称*/
    	if (!(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO))
    	{
    		printf("连接数据库失败!\n");
    	}
    	else {
    		printf("连接数据库成功!\n");
    	}                                      /*到这是用odbc连接到数据库,可以用到我们建立的study数据库里的数据了*/
    	ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
    }
    

    断开连接.h

    #pragma once
    #include"连接.h"
    void duankai() {
    	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接句柄
    	SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境句柄
    }
    
    

    main.c

    #include"连接.h"
    #include"断开连接.h"
    #include<stdlib.h>
    int main()
    {
    	system("color 70");
    	int s;
    	printf("*************************************************************\n");
    	printf("*************************************************************\n");
    	printf("******************欢迎使用图书馆操作软件!********************\n");
    	printf("*************************************************************\n");
    	printf("*************************************************************\n");
    	printf("请输入:\n1:管理员登录\n2:工作人员登录\n3:学生登录\n");
    	scanf("%d", &s);
    	switch (s)
    	{
    	case 1://系统管理员登录系统模块
    	{
    		lianjie();
    		printf("请输入登录账号:\n");
    		scanf("%s", Account);
    		printf("请输入登录密码:\n");
    		scanf("%s", Password);
    		SQLCHAR sql3[] = "use study";
    		SQLCHAR sql4[] = "select * from admin";
    		ret = SQLExecDirect(hstmt, sql3, SQL_NTS);
    		ret = SQLExecDirect(hstmt, sql4, SQL_NTS);
    		if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
    		{
    			SQLCHAR str1[50], str2[50];
    			SQLINTEGER len_str1, len_str2;
    			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);
    
    				for (int i = 0; i < 8; i++)
    				{
    					a[i] = str1[i];
    				}
    				for (int i = 0; i < 6; i++)
    				{
    					p[i] = str2[i];
    				}
    				if (strcmp(Account, a) == 0 && strcmp(Password, p) == 0 || strcmp(Account, a) == 0 && strcmp(Password, p) == 0)
    				{
    					printf("登录成功\n");
    					int x;
    					duankai();
    					printf("请输入:\n1:查询图书信息\n2:查询学生信息\n3:查询工作人员信息\n4:增加一条信息\n5:修改一条信息\n6:删除一条信息\n");
    					scanf("%d", &x);
    					switch (x)
    					{
    					case 1:
    					{ lianjie();
    					SQLCHAR sql1[] = { "use study" };
    					SQLCHAR sql2[] = { "select * from book" };
    
    					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];
    						SQLINTEGER len_str1, len_str2, len_str3, len_str4, len_str5;
    						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);
    							printf("%s\t%s\t%s\t%s\t%s\t\n", str1, str2, str3, str4, str5);
    						}
    					}
    					}
    					duankai(); break;
    					case 2:
    					{
    						lianjie();
    						SQLCHAR sql1[] = { "use study" };
    						SQLCHAR sql2[] = { "select * from reader" };
    
    						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];
    							SQLINTEGER len_str1, len_str2, len_str3, len_str4, len_str5;
    							while (SQLFetch(hstmt) != SQL_NO_DATA)
    							{
    								SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &len_str1);   //获取第一列数据
    								SQLGetData(hstmt, 2, SQL_C_CHAR
    
    下一篇:没有了