C# 用语句初始化数据库,创建库和表 MySQL示例

目录

简要说明

代码实现


简要说明

有时候项目中,在部署过程中,单独用工具去创建数据库和表,会消耗很多人力和时间,也不利于后期程序迭代去增加数据表,

那可以在程序启动的时候,去判断数据库和表是否存在,如果不存在则创建

包括后续表需要增加字段的话,也可以用语句去新增字段-可自行研究下,此篇文章没展示

下面的静态类方法可以直接复制使用,数据库链接的字段就要替换成你自己的数据即可,表结构数据也是

代码实现

  /// <summary>/// 数据库初始化/// </summary>public static class DBCreate{static string server = "127.0.0.1"; // 替换为你的服务器地址static string user = "root";     // 替换为你的用户名static string password = "123qwe"; // 替换为你的密码static string databaseName = "pz240606c"; // 替换为你的数据库名称static string T_Alarm = @"CREATE TABLE `pz240606c`.`T_Alarm`  (`ID` varchar(32) NOT NULL,`AlarmTime` datetime NOT NULL,`AlarmCode` varchar(32) NULL,`AlarmType` varchar(255) NULL,`AlarmContent` varchar(2048) NULL,`HandleTime` datetime NOT NULL,`IsUpLoad` int NULL,`CreateTime` datetime NOT NULL,PRIMARY KEY (`ID` DESC));";static string T_BoxNG = @"CREATE TABLE `pz240606c`.`T_BoxNG`  (`ID` varchar(32) NOT NULL,`Time` datetime NOT NULL,`Type` int NULL,`NGNum` int NULL,`QRCode` varchar(1024) NULL,`CreateTime` datetime NOT NULL,`Remark` varchar(2048) NULL DEFAULT NULL,`WorkNum` varchar(255) NULL,`IsTest` int NULL,PRIMARY KEY (`ID`));";static string T_LittleBox = @"CREATE TABLE `pz240606c`.`T_LittleBox`  (`ID` varchar(32) NOT NULL,`PackingQRCode` varchar(255) NOT NULL,`QRCode` varchar(255) NOT NULL,`BoxCode` varchar(255) NULL,`BoxName` varchar(255) NULL,`BoxSpec` varchar(255) NULL,`BoxColor` varchar(255) NULL,`Time` datetime NOT NULL,`CreateTime` datetime NOT NULL,`WorkNum` varchar(255) NULL,`IsUpload` int NULL,`IsTest` int NULL,PRIMARY KEY (`ID`));";static string T_Packing = @"CREATE TABLE `pz240606c`.`T_Packing`  (`ID` varchar(32) NOT NULL,`PackingCode` varchar(255) NULL,`PackingName` varchar(255) NULL,`PackingSpec` varchar(255) NULL,`PackingColor` varchar(255) NULL,`QRCode` varchar(255) NOT NULL,`Time` datetime NOT NULL,`CreateTime` datetime NOT NULL,`WorkNum` varchar(255) NULL,`IsUpload` int NULL,`IsTest` int NULL,PRIMARY KEY (`ID`));";static string T_TimeSummary = @"CREATE TABLE `pz240606c`.`T_TimeSummary`  (`ID` varchar(32) NOT NULL,`Type` int NOT NULL,`BeginTime` datetime NOT NULL,`EndTime` datetime NOT NULL,`CreateTime` datetime NOT NULL,`Remark` varchar(2048) NULL DEFAULT NULL,`WorkNum` varchar(255) NULL,PRIMARY KEY (`ID`)) COMMENT = '时间汇总表';";static Dictionary<string, string> tables = new Dictionary<string, string>(){{ "T_Alarm",DBCreate.T_Alarm},{ "T_BoxNG",DBCreate.T_BoxNG},{ "T_LittleBox",DBCreate.T_LittleBox},{ "T_Packing",DBCreate.T_Packing},{ "T_TimeSummary",DBCreate.T_TimeSummary },};/// <summary>/// 初始化数据库/// </summary>public static BaseResult CreateDB(){try{using (var connection = new MySqlConnection($"Server={server};User Id={user};Password={password};Port=3306;")){try{connection.Open();LogOperate.Start("Connected to MariaDB server.");// 检查数据库是否存在if (!DatabaseExists(connection, databaseName)){CreateDatabase(connection, databaseName);LogOperate.Start($"Database '{databaseName}' created.");}else{LogOperate.Start($"Database '{databaseName}' already exists.");}// 切换到目标数据库connection.ChangeDatabase(databaseName);foreach (var tb in tables){// 检查表是否存在if (!TableExists(connection, tb.Key)){CreateTable(connection, tb.Value);LogOperate.Start($"Table '{tb.Key}' created.");}else{LogOperate.Start($"Table '{tb.Key}' already exists.");}}}catch (Exception ex){LogOperate.Start($"An error occurred: {ex.Message}");return new BaseResult(false, "初始化数据库失败," + ex.Message);}}return BaseResult.Successed;}catch (Exception ex){return new BaseResult(false, "初始化数据库失败," + ex.Message);}}/// <summary>/// 检查数据库是否存在/// </summary>/// <param name="connection"></param>/// <param name="databaseName"></param>/// <returns></returns>static bool DatabaseExists(MySqlConnection connection, string databaseName){string query = $"SHOW DATABASES LIKE '{databaseName}'";using (var command = new MySqlCommand(query, connection)){using (var reader = command.ExecuteReader()){return reader.HasRows;}}}/// <summary>/// 创建数据库/// </summary>/// <param name="connection"></param>/// <param name="databaseName"></param>static void CreateDatabase(MySqlConnection connection, string databaseName){string query = $"CREATE DATABASE IF NOT EXISTS  {databaseName}";using (var command = new MySqlCommand(query, connection)){command.ExecuteNonQuery();}}/// <summary>/// 检查表是否存在/// </summary>/// <param name="connection"></param>/// <param name="tableName"></param>/// <returns></returns>static bool TableExists(MySqlConnection connection, string tableName){string query = $"SHOW TABLES LIKE '{tableName}'";using (var command = new MySqlCommand(query, connection)){using (var reader = command.ExecuteReader()){return reader.HasRows;}}}/// <summary>/// 创建表/// </summary>/// <param name="connection"></param>/// <param name="sql"></param>static void CreateTable(MySqlConnection connection, string sql){string query = sql;using (var command = new MySqlCommand(query, connection)){command.ExecuteNonQuery();}}}

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

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

相关文章

基于SpringBoot的疫苗在线预约功能实现十二

一、前言介绍&#xff1a; 1.1 项目摘要 随着全球公共卫生事件的频发&#xff0c;如新冠疫情的爆发&#xff0c;疫苗成为了预防和控制传染病的重要手段。传统的疫苗预约方式&#xff0c;如人工挂号或电话预约&#xff0c;存在效率低、易出错、手续繁琐等问题&#xff0c;无法…

java技术点

1 mysql的索引下推: 就是从减少服务层的的回表操作&#xff0c;在引擎层实现联表查询 2 可重入锁: 就是当前:z线程可重复获取锁&#xff0c;比如递归函数里有锁&#xff0c;防止死锁 3 解决redis脑裂: 参数 持久化 优化网络和硬件 4 加密&#xff1a; MD5 不可解 对称算法…

MySQL基础 -----MySQL数据类型

目录 INT类型 tinyint类型 类型大小范围 测试tinyint类型数据 float类型 测试&#xff1a; 测试正常数据范围的数据 测试插入范围超过临界值的数据&#xff1a; 测试float类型的四舍五入 ​编辑 decimal类型 同样测试&#xff1a; 字符串类型 char类型 测试&…

代码开发相关操作

使用Vue项目管理器创建项目&#xff1a;&#xff08;vue脚手架安装一次就可以全局使用&#xff09; windowR打开命令窗口&#xff0c;输入vue ui&#xff0c;进入GUI页面&#xff0c;点击创建-> 设置项目名称&#xff0c;在初始化git下面输入&#xff1a;init project&…

Pandas系列|第一期:列值的前N码模糊匹配

背景&#xff1a;物料清单&#xff08;BOM&#xff09;在做关键器件筛选时&#xff0c;需要筛选出编码的前N码模糊匹配给定的前缀list的所有bom行 关键点&#xff1a;前N码模糊匹配 df[col].str.startswith(tuple(item_prefix_list)&#xff09; 解决方法&#xff1a; impor…

如何在 Ubuntu 22.04 上安装和使用 Rust 编程语言环境

简介 Rust 是一门由 Mozilla 开发的系统编程语言&#xff0c;专注于性能、可靠性和内存安全。它在没有垃圾收集的情况下实现了内存安全&#xff0c;这使其成为构建对性能要求苛刻的应用程序&#xff08;如操作系统、游戏引擎和嵌入式系统&#xff09;的理想选择。 接下来&…

MybatisPlus-配置加密

配置加密 目前配置文件中的很多参数都是明文&#xff0c;如果开发人员发生流动&#xff0c;很容易导致敏感信息的泄露。所以MybatisPlus支持配置文件的加密和解密功能。 我们以数据库的用户名和密码为例。 生成秘钥 首先&#xff0c;我们利用AES工具生成一个随机秘钥&#…

记录:virt-manager配置Ubuntu arm虚拟机

virt-manager&#xff08;Virtual Machine Manager&#xff09;是一个图形用户界面应用程序&#xff0c;通过libvirt管理虚拟机&#xff08;即作为libvirt的图形前端&#xff09; 因为要在Linux arm环境做测试&#xff0c;记录下virt-manager配置arm虚拟机的过程 先在VMWare中…

艾体宝案例丨CircleCI 助力 ANA Systems 打造高效 CI/CD 模型

在现代软件开发领域&#xff0c;效率和可靠性是企业在竞争中取胜的关键。本文将深入探讨 ANA Systems 如何通过引入业界领先的 CI/CD 平台——CircleCI&#xff0c;克服传统开发流程的瓶颈&#xff0c;实现开发运营效率的全面提升。同时&#xff0c;本文还将详细解析 CircleCI …

Linux dd 命令详解:工作原理与实用指南(C/C++代码实现)

这段代码是一个模仿 Linux dd 命令的工具&#xff0c;它用于在不同文件之间复制数据。dd 是一个非常强大的命令行工具&#xff0c;可以用于数据备份、转换和复制。下面我将详细解释这段代码的原理、实现方式以及如何运行和测试。 Linux dd 命令的工作原理 dd 命令是 Unix 和 …

ChatGPT客户端安装教程(附下载链接)

用惯了各类AI的我们发现每天打开网页还挺不习惯和麻烦&#xff0c;突然发现客户端上架了&#xff0c;懂摸鱼的人都知道这里面的道行有多深&#xff0c;话不多说&#xff0c;开整&#xff01; 以下是ChatGPT客户端的详细安装教程&#xff0c;适用于Windows和Mac系统&#xff1a…

《C 语言携手 PaddlePaddle C++ API:开启深度学习开发新征程》

在深度学习领域&#xff0c;PaddlePaddle 作为一款强大的深度学习框架&#xff0c;为开发者提供了丰富的功能和高效的计算能力。而 C 语言&#xff0c;凭借其高效性和广泛的应用场景&#xff0c;与 PaddlePaddle 的 C API 相结合&#xff0c;能够为深度学习开发带来独特的优势。…

ARM CCA机密计算安全模型之固件启动

安全之安全(security)博客目录导读 目录 1、安全启动(Verified boot) 2、镜像格式和签名方案 3、防回滚 4、离线启动(Off-line boot) 5、CCA HES固件启动流程 6、CCA系统安全域启动过程 7、应用程序PE启动过程 8、稳健性 本节定义了将CCA固件引导至可证明状态的要…

Element@2.15.14-tree checkStrictly 状态实现父项联动子项,实现节点自定义编辑、新增、删除功能

背景&#xff1a;现在有一个新需求&#xff0c;需要借助树结构来实现词库的分类管理&#xff0c;树的节点是不同的分类&#xff0c;不同的分类可以有自己的词库&#xff0c;所以父子节点是互不影响的&#xff1b;同样为了选择的方便性&#xff0c;提出了新需求&#xff0c;选择…

【ALSA】snd_pcm_avail 接口

目录 简介使用场景注意事项函数签名代码示例 简介 snd_pcm_avail 是 ALSA&#xff08;Advanced Linux Sound Architecture&#xff09;库中的一个函数&#xff0c;用于获取 PCM&#xff08;Pulse Code Modulation&#xff09;设备环形缓冲区中可用的音频数据量。这个函数对于音…

计算机网络——期末复习(1)背诵

背诵 交换机与路由器&#xff1a;交换机连接同一子网&#xff0c;利用帧中的目的物理地址转发帧&#xff0c;工作在数据链路层&#xff1b;路由器连接不同子网&#xff0c;利用IP数据报中的目的IP地址转发IP数据报&#xff0c;工作在网络层。五层的任务&#xff1a;&#xff0…

概率论得学习和整理27:关于离散的数组 随机变量数组的均值,方差的求法3种公式,思考和细节。

目录 1 例子1&#xff1a;最典型的&#xff0c;最简单的数组的均值&#xff0c;方差的求法 2 例子1的问题&#xff1a;例子1只是1个特例&#xff0c;而不是普遍情况。 2.1 例子1各种默认假设&#xff0c;导致了求均值和方差的特殊性&#xff0c;特别简单。 2.2 我觉得 加权…

【HarmonyOS NEXT】Web 组件的基础用法以及 H5 侧与原生侧的双向数据通讯

关键词&#xff1a;鸿蒙、ArkTs、Web组件、通讯、数据 官方文档Web组件用法介绍&#xff1a;文档中心 Web 组件加载沙箱中页面可参考我的另一篇文章&#xff1a;【HarmonyOS NEXT】 如何将rawfile中文件复制到沙箱中_鸿蒙rawfile 复制到沙箱-CSDN博客 目录 如何在鸿蒙应用中加…

ASP.NET Core - 依赖注入 自动批量注入

依赖注入配置变形 随着业务的增长&#xff0c;我们项目工作中的类型、服务越来越多&#xff0c;而每一个服务的依赖注入关系都需要在入口文件通过Service.Add{}方法去进行注册&#xff0c;这将是非常麻烦的&#xff0c;入口文件需要频繁改动&#xff0c;而且代码组织管理也会变…

Spring Boot 3.X:Unable to connect to Redis错误记录

一.背景 最近在搭建一个新项目&#xff0c;本着有新用新的原则&#xff0c;项目选择到了jdk17SpringBoot3.4。但是在测试Redis连接的时候却遇到了以下问题&#xff1a; redis连不上了。于是我先去检查了配置文件的连接信息&#xff0c;发现没问题&#xff1b;再去检查配置类&am…