常用数据库之sql server的使用和搭建

news2024/11/17 7:31:21

1.1 介绍

   关系型数据库,SQLServer是由微软公司开发的一种关系型据库管理系统,它已广泛用于电子商务、银行、保险、电力等行业。SQLServer提供了对XML和Internet标准的支持,具有强大的、灵活的、基于Web的应用程序管理功能。

1.2 优缺点

优点:

1>通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
2>通过创建索引可以大大加快数据的检索速度
3>通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
4>在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间

缺点:

1>只能运行在windows平台,平台单一不具备开放性
2>并行实施与共存模型不成熟,难以处理大规模的数据,伸缩性有限
3>当用户连接多时性能会变得很差并且不稳定
4>客户端支持应用模式,仅支持C/S模式

1.3 服务器安装

1.3.1 安装软件:

1> 下载sql server 2019 下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads

在这里插入图片描述
2> 选择自定义类型进行安装:
在这里插入图片描述

3> 选择语言和安装位置,点击安装
在这里插入图片描述

4>安装成功后出现以下界面,选择安装,选择全新的SQLServer 独立安装或向现有安装添加功能

在这里插入图片描述

5>选择指定可用版本Developer,点击下一步
在这里插入图片描述

6>更新选择,可点可不点
在这里插入图片描述

7>安装执行完毕后继续下一步
在这里插入图片描述

8>功能选择中,可以不勾选R、Python、java,其他都勾选后,点击下一步
在这里插入图片描述

9>选择默认实例,点击下一步,下一步
在这里插入图片描述

10>选择混合模式,设置密码,和添加当前用户,然后点击下一步
在这里插入图片描述

11>选择表格模式,添加当前用户后,点击下一步
在这里插入图片描述

12>默认配置无需更改,点击下一步,下一步
在这里插入图片描述
13>Distributed Replay的访问权限,选择的是当前用户,点击下一步,下一步
在这里插入图片描述
14>脱机安装Microsoft机器学习服务器组件

将页面4个蓝色链接分别复制到浏览器,下载4个压缩包,将4个压缩包放在同一个文件下,无需解压,然后把每个压缩包的名字里的1033替换成2052

在这里插入图片描述
在这里插入图片描述
以上操作都ok后,接下来就可以回到sql sever安装界面中选择包含4个压缩包的文件目录了,就会出现下一步按钮了,我们就可以继续点击下一步

15>进入准备安装界面,点击安装,耐心等待安装完成

在这里插入图片描述
在这里插入图片描述

17>下载SQL Server Management Studio软件,用于数据库的连接与管理,下载地址:https://aka.ms/ssmsfullsetup,安装后,进入连接

在这里插入图片描述

18>连接后,右键弹出界面点击属性

在这里插入图片描述

19>在属性页面里,选择安全性,选择SQL Server和windows身份验证模式,然后点击确定

在这里插入图片描述
20>在安全性-》登录名-sa,右键点击,弹出属性界面,在常规界面上确认密码

在这里插入图片描述

在这里插入图片描述
21>属性界面,在状态栏,上勾选授予和启用

在这里插入图片描述

22>设置允许远程连接,打开sql server congfiguration Manager,启用TCP/IP

在这里插入图片描述

23>右键TCP/IP可以打开属性界面,检查和配置IP、端口

在这里插入图片描述
24>都设置好后,可以在SQL Server Management Studio重启,也可以在sql server congfiguration Manager的重启第三个服务

1.4 简单使用

1>使用navicat连接数据库:

在这里插入图片描述
2> 连接后,右键新建数据库,在新的数据库上新建表格

在这里插入图片描述
在这里插入图片描述
3>客户端连接数据库代码

database.h

/* 
 * Filename:      	DataBase.h
 * Modify:		    ybLin
 * Description:  	database
 * *******************************************************/
#ifndef __EXSKY_DATA_BASE_H__
#define __EXSKY_DATA_BASE_H__
#include <basic/myThread.h>

#import "..\WinLib\Others\msado15.dll" no_namespace rename("EOF","adoEOF")

typedef struct {
	char sMateriel[256];
	char sOrderNo[256];
	char sModel[256];
	char sLens[256];
	char sSNCode[256];
	char sMacId[256];
	char sAddTime[64];
} _mac_info;


class CDataBase 
{
public:
	CDataBase(const char* hostIP = NULL);
	~CDataBase();

public:
	bool m_nCheckModel;
	void UpdateDB();
	bool InitDB();
	bool Init(const char* hostIP = "192.168.8.121", 
    const char* dataBase = "ManageDB", int hostPort = 1433,
    const char* user = "sa", const char* pwd = "123456");
	bool Free();

	//use
	int InsertMacInfo(_mac_info* _info);
	int GetMacInfo(_mac_info* _info)

private:
	bool ADOExecute(const char* sql);
	int DataWrite(const char* sql);
private:
	bool			m_bInitOk;
	my_mutex_t*		m_pDbMutex;
	char			m_sHostIp[256];
	int 			m_nHostPort;
	char			m_sDataBase[256];
	char			m_sAccount[256];
	char			m_sPwd[256];
    BOOL            m_bTest;
	_ConnectionPtr m_pConnection;
	_RecordsetPtr m_pADOSet;
	_RecordsetPtr m_pADOSetAuto;
};

#endif

database.cpp

/* 
 * Filename:      	DataBase.cpp
 * Modify:		    ybLin
 * Description:  	database
 * *******************************************************/

#ifdef WIN32
#include <time.h>
#include <Windows.h>
#include <io.h>
#endif

#include "DataBase.h"
#include <time.h> 
#include <stdio.h> 
#include <Windows.h>
#include <time.h>
#include <basic/myThread.h>

int SwitchPath(char* target, const char* src)
{
	while (*src != '\0') {
		if (*src == '\\')
			*target++ = *src;
		*target++ = *src++;
	}
	*target = '\0';
	return 0;
}


CDataBase::CDataBase(const char* hostIP)
{
	m_nCheckModel = false;
	m_pDbMutex = my_mutex_init();
	memset(m_sDataBase, 0, sizeof(m_sDataBase));
	memset(m_sHostIp, 0, sizeof(m_sHostIp));
	m_nHostPort = 0;
	memset(m_sAccount, 0, sizeof(m_sAccount));
	memset(m_sPwd, 0, sizeof(m_sPwd));
	m_bInitOk = false;
}
 
CDataBase::~CDataBase()
{
	if (m_bInitOk) 
		Free();
	my_mutex_destroy(m_pDbMutex);
}

void CDataBase::UpdateDB()
{
	char sql[1024] = {0};
	snprintf(sql, 1023, "if not exists(select * from syscolumns where id=object_id('sninfo') and name='model') ALTER table sninfo add model varchar(30)");
	DataWrite(sql);
	char sql2[1024] = {0};
	snprintf(sql2, 1023, "if not exists(select * from syscolumns where id=object_id('sninfo') and name='model2') ALTER table sninfo add model2 varchar(30)");
	DataWrite(sql2);
}

bool CDataBase::Init(const char* hostIP, const char* dataBase, int hostPort,
const char* user, const char* pwd)
{
	snprintf(m_sHostIp, 255, "%s", hostIP);
	m_nHostPort = hostPort;
	snprintf(m_sDataBase, 255, "%s", dataBase);
	snprintf(m_sAccount, 255, "%s", user);
	snprintf(m_sPwd, 255, "%s", pwd);
	return InitDB();
}

bool CDataBase::InitDB()
{
	if (m_bInitOk)
		return false;
	HRESULT hr;
	try
	{
        my_print("CDataBase::InitDB Start.");
		char sConnectStr[256] = {0};
		snprintf(sConnectStr, sizeof(sConnectStr)-1, "pConn-&gt;ConnectionString = &quot;driver={SQL Server};Server=%s,%d;DATABASE=%s;", 
                m_sHostIp, m_nHostPort, m_sDataBase);
		hr = m_pConnection.CreateInstance("ADODB.Connection");
		if(SUCCEEDED(hr))
		{
			m_pConnection->ConnectionTimeout = 5;
			hr = m_pConnection->Open(sConnectStr, m_sAccount, m_sPwd, 0);
		}
        my_print("yibin test CDataBase::InitDB Success.");
	}
	catch(_com_error e)
	{
		char sErrorMsg[256];
		snprintf(sErrorMsg, sizeof(sErrorMsg)-1, "数据库连接错误:%s", e.Description());
		my_print(sErrorMsg);
		return FALSE;
	} 
	m_pADOSet.CreateInstance(__uuidof(Recordset));
	m_pADOSetAuto.CreateInstance(__uuidof(Recordset));
	m_bInitOk = true;
	return m_bInitOk;
}

bool CDataBase::Free()
{
	if(m_bInitOk)
    {
		if(adStateOpen == m_pConnection->State)	
			m_pConnection->Close();

		m_pConnection.Release();

		if(adStateOpen == m_pADOSet->State)	
			m_pADOSet->Close();

		m_pADOSet.Release();
		if(adStateOpen == m_pADOSetAuto->State)	
			m_pADOSetAuto->Close();
		m_pADOSetAuto.Release();
		m_bInitOk = false;
	} 
    else 
    {
		return false;
	}
	return true;
}

bool CDataBase::ADOExecute(const char* sql)
{
	if ( m_pADOSet->State)
	{
		m_pADOSet->Close();
	}
	try
	{
       	m_pADOSet->Open(sql, m_pConnection.GetInterfacePtr(), adOpenStatic, 
            adLockOptimistic, adCmdUnknown);
		return true;
	}
	catch(_com_error &e)
	{
		char sErrorMsg[256];
		snprintf(sErrorMsg, sizeof(sErrorMsg)-1, "Execute SQL:%s ERROR:%s", 
            sql, e.ErrorMessage());
		my_print(sErrorMsg);
		return false;
	}
	return true;
}

int CDataBase::DataWrite(const char* sql)
{
	int	nRet = 0;
	char	str[1024] = {0};

	my_mutex_lock(m_pDbMutex);
	if (!m_bInitOk) 
    {
		my_mutex_unlock(m_pDbMutex);
		return -1;
	}
	SwitchPath(str, sql);
	if (ADOExecute(str) != true) 
	{
		Free();
		InitDB();
		if (m_bInitOk && ADOExecute(str) == true) {
		} 
		else 
		{
			nRet = -1;
		}
	}
	my_mutex_unlock(m_pDbMutex);
	return nRet;
}

//use
int CDataBase::InsertMacInfo(_mac_info* _info)
{
	char sql[1024] = {0};
	snprintf(sql, 1023, "select Mac,SNCode,AddTime from IPCInfo WHERE Mac = '%s'", _info->sMacId);
	
	DataWrite(sql);
	if(!m_pADOSet->adoEOF)
		return -10;
		
	//addTime
	SYSTEMTIME sysTime = {0};
	GetLocalTime(&sysTime);
	_snprintf(_info->sAddTime, sizeof(_info->sAddTime)-1, "%d-%02d-%02d %02d:%02d:%02d", 
		sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
	
	snprintf(sql, 1023, "INSERT INTO IPCInfo (Materiel, OrderNo, Model, Lens, SNCode, Mac, AddTime) VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s')", 
		_info->sMateriel, _info->sOrderNo, _info->sModel, _info->sLens, _info->sSNCode, _info->sMacId, _info->sAddTime);
	return DataWrite(sql);		
}

int CDataBase::GetMaxMacInfo(_mac_info* _info)
{
	char sql[1024] = {0};
	snprintf(sql, 1023, "select Mac,SNCode,AddTime from IPCInfo order by Mac desc");
	unsigned mac_calc[6] = {0};
	
	if (DataWrite(sql) != 0) 
	{
		my_print("DataWrite Fail \n");
		return -2;
	} 
	else 
	{
		_variant_t Holder;
		if(!m_pADOSet->adoEOF) 
		{
			Holder = m_pADOSet->GetCollect("Mac");
			snprintf(_info->sMacId, 
                sizeof(_info->sMacId)-1, Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder);
			Holder = m_pADOSet->GetCollect("SNCode");
			snprintf(_info->sSNCode, 
                sizeof(_info->sSNCode)-1, Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder);
			Holder = m_pADOSet->GetCollect("AddTime");
			snprintf(_info->sAddTime, 
                sizeof(_info->sAddTime)-1, Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder);
		}
	}
	if(sscanf(_info->sMacId, "%02X%02X%02X%02X%02X%02X", &mac_calc[5], &mac_calc[4], 
        &mac_calc[3], &mac_calc[2], &mac_calc[1], &mac_calc[0]) != 6)
	{
		my_print("sscanf Fail \n");
		return -3;
	}
	
	//addTime
	char szTime[32] = {0};
	char AddDate[32] = {0};
	char AddTime[32] = {0};
	SYSTEMTIME sysTime = {0};
	GetLocalTime(&sysTime);
	snprintf(szTime, sizeof(szTime)-1, "%d-%02d-%02d", 
		sysTime.wYear, sysTime.wMonth, sysTime.wDay);

    time_t  iTime = time(NULL);
	char sTime[32] = {0};
	struct tm* ptm = localtime(&iTime);
	_snprintf(sTime, sizeof(sTime)-1, "%4d-%02d-%02d", ptm->tm_year + 1900,
        ptm->tm_mon + 1, ptm->tm_mday);

	sscanf(_info->sAddTime, "%s %s", AddDate, AddTime);
    
	char SNPre[32] = {0};
	char SNDate[32] = {0};
	if(strcmp(szTime, AddDate) == 0)
	{
		strncpy (SNPre, _info->sSNCode, 3);
        int year;
        int month;
        int day;
        char date[32] = {0};
  
        sscanf(AddDate, "%d-%2d-%2d", &year, &month, &day);
        _snprintf(date, sizeof(date)-1, "%d%02d%02d", year, month, day);
        int snNum = atof(_info->sSNCode+11)+1;
        memset(_info->sSNCode, 0, sizeof(_info->sSNCode));
		_snprintf(_info->sSNCode, sizeof(_info->sSNCode)-1, "%s%s%04d", SNPre, date, snNum);
	}
	else
	{
		strncpy (SNPre, _info->sSNCode, 3);
		
		snprintf(SNDate, sizeof(szTime)-1, "%d%02d%02d", ptm->tm_year + 1900,
            ptm->tm_mon + 1, ptm->tm_mday);
		snprintf(_info->sSNCode, sizeof(_info->sSNCode), "%s%s%s",
            SNPre, SNDate, "0001");
	}
	_snprintf(_info->sMacId, sizeof(_info->sMacId)-1, "%02X%02X%02X%02X%02X%02X",
        mac_calc[5], mac_calc[4], mac_calc[3], mac_calc[2], mac_calc[1], mac_calc[0]);
	return 0;
}

1.5 结果展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

毕业设计-基于机器视觉的安全帽佩戴识别系统

目录 前言 课题背景与意义 课题实现技术思路 目标检测 算法检测 算法实现 最后 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越…

企业子网划分详解

一、IP协议 1、IP协议简介 IP协议是TCP/IP协议族的基石,它为上层提供无状态、无连接、不可靠的服务,也是Socket网络编程的基础之一。 IP协议特点: 无状态:指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送,传输,接收都是相互独立的。这种服务最大缺点是…

Web5到底是什么?Web4去哪了?

Web3咱还没搞明白&#xff0c;Web3还没有完全的投入应用 &#xff0c;这Web5怎么就来了&#xff1f; 在今年6月召开的加密盛宴Consensus上&#xff0c;推特创始人比特必信徒杰克多西&#xff0c;首次提出全新Web5的概念&#xff0c;并公开呛声Web3的VC们可以洗洗睡了&#xff…

【Lilishop商城】No2-7.确定软件架构搭建六(本篇包括延时任务,会用到rocketmq、redis)

仅涉及后端&#xff0c;全部目录看顶部专栏&#xff0c;代码、文档、接口路径在&#xff1a; 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇只介绍重点架构逻辑&#xff0c;具体编写看源代码就行&#xff0c;读起来也不复杂~ 谨慎&#xf…

使用python进行贝叶斯统计分析

本文讲解了使用PyMC3进行基本的贝叶斯统计分析过程. 最近我们被客户要求撰写关于贝叶斯统计分析的研究报告&#xff0c;包括一些图形和统计输出。 # 导入 import pymc3 as pm # python的概率编程包 import numpy.random as npr # numpy是用来做科学计算的 import matplotlib…

cubeIDE开发,结合图片取模工具,stm32程序在LCD显示图片

一、图片取模工具&#xff08;imag2lcd&#xff09; 我们前面将汉字显示时说过&#xff0c;嵌入式LCD屏显示就是通过LCD屏幕数据接口给每个屏幕像素给出一个颜色值实现实时渲染显示出来。只不过文字显示时&#xff0c;给出的是一个二进制点阵&#xff0c;然后根据二进制中的“1…

Java文件输入输出(简单易懂版)

文章目录写在前面文件输入文件输出写在前面 在Java中不论文件输入还是输出都会用到File类&#xff0c;参考这篇文章Java File类&#xff08;文件操作类&#xff09;详解这里会涉及到绝对路径、相对路径、路径中的斜杠“/”和反斜杠“\”&#xff0c;有些小伙伴可能不熟悉&…

数据结构—B树、B+树

文章目录B树B树的特点为什么要有B树&#xff1a;红黑树和B树比较B树B树的特点B树构建过程查询时数据提供数据磁盘向cpu推送数据B树的优点总结为什么要有B树&#xff1a;B树用途&#xff1a;为什么要有B树&#xff1a;B树用途&#xff1a;———————————————————…

WorkTool企微机器人APP分享自定义小程序

移动端应用怎么分享自定义小程序到企业微信 前言 什么是自定义小程序&#xff0c;就是我们可以通过业务逻辑或代码来动态修改每次发出的小程序所附带的路径(path)和参数(params)&#xff0c;以此来控制每次发出的小程序都是有不同含义的&#xff0c;但企业微信并不让我们这样…

[附源码]Python计算机毕业设计Django体育器材及场地管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【Spring】事务管理

目录项目目录spring-dao.xml测试项目目录 UserMapper.xml写sql语句UserMapperImpl继承sqlSessionDaoSupport然后在里面做一个addUser和一个delete我们delete语句故意写错 但是我们想把add和delete当成一个事务delete错了&#xff0c;add也不应该成功所以我们需要进行事务管理配…

FLStudio2023水果中文版本使用操作心得与技巧

FL Studio2023是一款强大的音乐创作编辑软件&#xff0c;因软件LOGO为水果标志&#xff0c;故我们国人都习惯称之为水果。它让你的计算机就像是全功能的录音室&#xff0c;漂亮的大混音盘&#xff0c;先进的创作工具&#xff0c;让你的音乐突破想象力的限制。因此它又有"水…

手撕ThreadLocal源码

首先&#xff0c;创建MyThreadLocal类&#xff0c;区分开java.lang.ThreadLocal package com.huhu.threadlocal;import java.util.HashMap; import java.util.Map;public class MyThreadLocal<T> {/*** 所有需要和当前线程绑定的数据要放到这个容器当中*/private Map<…

WIFI的传输距离介绍

WIFI的传输距离介绍 WiFi模块在智能家居&#xff0c;智能驾舱等各行业各领域应用极广&#xff0c; 但有多少人了解他的传输距离是多少呢&#xff1f;是受什么影响呢&#xff1f; 一&#xff1a;WiFi模块的传输距离 WiFi模块的传输距离普遍在100-200米之间&#xff0c;其中也有支…

乐观锁思想在JAVA中的实现——CAS

前言 生活中我们看待一个事物总有不同的态度&#xff0c;比如半瓶水&#xff0c;悲观的人会觉得只有半瓶水了&#xff0c;而乐观的人则会认为还有半瓶水呢。很多技术思想往往源于生活&#xff0c;因此在多个线程并发访问数据的时候&#xff0c;有了悲观锁和乐观锁。 悲观锁认…

React+ts学习文档

1.项目中遇到的困难解决以及方案 1.顶部的查询按钮 点击查询如果在该组件去进行axios请求&#xff0c;这样再该组件下获得返回的列表还需要传回父组件&#xff0c;父组件再把列表发给下面的table组件&#xff0c;不太方便。 解决方案&#xff1a;将用户的选择项传给顶级组件i…

Kubernetes v1.25 搭建一个单节点集群用于Debug K8S源码

参考说明 参考自&#xff1a;v1.25.0-CentOS-binary-install-IPv6-IPv4-Three-Masters-Two-Slaves.md&#xff0c;按照自己的理解修改了下。 搭建好的单节点v1.25.4版本集群 1. 集群环境准备 1.1. 主机规划 IP主机名主机角色操作系统安装组件192.168.11.71k8s-master1maste…

在Python中使用LSTM和PyTorch进行时间序列预测

顾名思义&#xff0c;时间序列数据是一种随时间变化的数据类型。例如&#xff0c;24小时内的温度&#xff0c;一个月内各种产品的价格&#xff0c;一年中特定公司的股票价格。 去年&#xff0c;我们为一位客户进行了短暂的咨询工作&#xff0c;他正在构建一个主要基于时间序列…

【✨十五天搞定电工基础】正弦交流电路的分析

本章要求 1. 理解正弦量的特征及其各种表示方法&#xff1b; 2. 理解电路基本定律的相量形式及阻抗&#xff1b;熟练掌握计算正弦交流电路的相量分析法&#xff0c; 会画相量图&#xff1b; 3. 掌握有功功率和功率因数的计算,了解瞬时功率、无功功率和视在功率的概…

项目管理(如何进行团队管理)

团队构建与管理6步走 各项工作概述: 获取团队成员需要考虑的因素: 可用性。确认资源能否在项目所需时段内为项目所用。 成本。确认增加资源的成本是否在规定的预算内。 能力。确认团队成员是否提供了项目所需的能力。 有些选择标准对团队资源来说是独特的,包括: 经验。…