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

news2024/12/15 22:25:55

目录

简要说明

代码实现


简要说明

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

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

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

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

代码实现

  /// <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.coloradmin.cn/o/2260163.html

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

相关文章

ansible部署nginx:1个简单的playbook脚本

文章目录 hosts--ventoryroles执行命令 使用ansible向3台centos7服务器上安装nginx hosts–ventory [rootstand playhook1]# cat /root/HOSTS # /root/HOSTS [webservers] 192.168.196.111 ansible_ssh_passpassword 192.168.196.112 ansible_ssh_passpassword 192.168.196.1…

SpringBoot左脚进门之Maven管理家

一、概念 Maven 是一个项目管理和整合工具。通过对 目录结构和构建生命周期 的标准化&#xff0c; 使开发团队用极少的时间就能够自动完成工程的基础构建配置。 Maven 简化了工程的构建过程&#xff0c;并对其标准化&#xff0c;提高了重用性。 Maven 本地仓库 (Local Reposi…

最短路----Dijkstra算法详解

简介 迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻&#xff08;Edsger Dijkstra&#xff09;在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉…

论文概览 |《Urban Analytics and City Science》2022.11 Vol.49 Issue.9

本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2022年11月第49卷第9期的论文的题目和摘要&#xff0c;一共包括19篇SCI论文&#xff01; 论文1 On economic and urban growth 经济发展与城市增长 【摘要】 The dominant imperativ…

软件安装不成功,一直出现“chrome_elf.dll丢失”问题是什么原因?“chrome_elf.dll丢失”要怎么解决和预防?

软件安装遇阻&#xff1a;“chrome_elf.dll丢失”问题全解析与解决方案 在软件安装与运行的过程中&#xff0c;我们时常会遇到各式各样的错误提示&#xff0c;其中“chrome_elf.dll丢失”便是较为常见的一种。这个错误不仅阻碍了软件的正常安装&#xff0c;也给用户带来了不小…

04面向对象篇(D4_OOT(D1_OOT - 面向对象测试))

目录 一、 面向对象影响测试 1. 封装性影响测试 2. 继承性影响测试 3. 多态性影响测试 二、 面向对象测试模型 三、 面向对象分析测试 1. 对象测试 2. 结构测试 3. 主题测试 4. 属性和实例关联测试 5. 服务和消息关联测试 四、面向对象设计测试 1. 对认定类测试 …

java之静态变量和方法(类变量、类方法)

1 类变量 1.1 简要介绍 由一个简单的程序引出&#xff1a; public class Example1 {int n;static int num 10; //有 static 修饰//此时 num 即为一个类变量&#xff08;静态变量&#xff09;&#xff0c;static 表示静态的//这个变量的最大特点是&#xff0c;它会被 Exampl…

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试&#xff1a; 第一轮是逻辑行测&#xff0c;25道题目&#xff0c;类似于公务员考试题目&#xff0c;要求90分钟内完成。第二轮是技术面试&#xff0c;主要是做一些数据结…

五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

目录 一、导论 二、路由选择算法 2.1 路由&#xff08;route&#xff09;的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择&#xff08;lin…

音视频入门基础:MPEG2-TS专题(16)——PMT简介

一、引言 PMT&#xff08;Program Map Table&#xff09;与PAT表成对出现&#xff0c;其PID由PAT表给出。通过PMT表可以得到该节目包含的视频和音频信息&#xff0c;从而找到音视频流&#xff1a; 二、PMT表中的属性 根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第79页&#x…

结构变量的占用多少个字节

1、在linux中&#xff0c;这种写法比较清晰 struct gpio_led_data { u8 can_sleep; //如果定义了结构变量&#xff0c;则该成员占用1个字节 u8 blinking; //如果定义了结构变量&#xff0c;则该成员占用1个字节 }; struct gpio_leds_priv { int num_leds; //如…

网页端web内容批注插件:

感觉平时每天基本上90%左右的时间都在浏览器端度过&#xff0c;按理说很多资料都应该在web端输入并且输出&#xff0c;但是却有很多时间浪费到了各种桌面app中&#xff0c;比如说什么notion、语雀以及各种笔记软件中&#xff0c;以及导入到ipad的gn中&#xff0c;这些其实都是浪…

递归问题(c++)

递归设计思路 数列递归 : 如果一个数列的项与项之间存在关联性&#xff0c;那么可以使用递归实现 ; 原理 : 如果一个函数可以求A(n)&#xff0c;那么该函数就可以求A(n-1)&#xff0c;就形成了递归调用 ; 注意: 一般起始项是不需要求解的&#xff0c;是已知条件 这就是一个典型…

分布式 窗口算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & 窗口算法 & 总结》《分布式 & 窗口算法 & 问题》 参考文献 《【算法】令牌桶算法》 固定窗口算法 简介 固定窗口算法是最简单的流量控制算法。固定窗口算法的核心原理是将系统的生命周期划分为一个个…

Linux shell的七大功能 --- history

1.直接输入“history” 这个命令可以显示出曾经使用过的命令&#xff08;最近时间的500条&#xff09; history 2.“history”命令也可以搭配其他命令一起使用。 例&#xff1a;history | grep "vim"&#xff0c;找出所有包含“vim”的记录&#xff1b; 也可以搭配…

C# 探险之旅:第九节 - 循环(for):无限循环的魔法轮盘!

嘿&#xff0c;勇敢的探险家们&#xff0c;欢迎回到C#的神秘世界&#xff01;在这一节里&#xff0c;我们将踏上一场关于循环的奇妙冒险&#xff0c;特别是那个能带我们无限次探险的“for循环”&#xff01;准备好了吗&#xff1f;让我们一起揭开for循环的神秘面纱&#xff0c;…

基于回溯法解决八皇后问题+以位运算方法优化n皇后问题(算法与数据结构期末设计)

文章目录 基于回溯法解决八皇后问题以位运算方法优化n皇后问题1. 八皇后问题问题描述2.回溯法求八皇后&#xff08;n皇后&#xff09;问题①由四皇后问题引入②皇后的占位问题③皇后的放置过程④放置过程中的问题⑤回溯算法核心⑥回溯算法的求解过程⑦验证算法和代码实现LeetCo…

python学opencv|读取图像(九)用numpy创建黑白相间灰度图

【1】引言 前述学习过程中&#xff0c;掌握了用numpy创建矩阵数据&#xff0c;把所有像素点的BGR取值设置为0&#xff0c;然后创建纯黑灰度图的方法&#xff0c;具体链接为&#xff1a; python学opencv|读取图像&#xff08;八&#xff09;用numpy创建纯黑灰度图-CSDN博客 在…

若依实现图片上传时自动添加水印

文章目录 总体思路1. 修改通用上传方法2. 去除文件路径前两级目录3. 添加水印方法运行效果总结 为了解决图盗用&#xff0c;并有效保护图片版权&#xff0c;若依项目需要实现一个功能&#xff1a;上传图片时&#xff0c;自动在图片上添加水印。这不仅可以有效防止盗用&#xff…

[C#与C++交互] 跨进程通信NamedPipes

目录 1、前言 2、什么是命名管道&#xff1f; 3、实现步骤 4、示例代码 4.1 C 服务器代码 4.2 C# 客户端代码 5、运行步骤 6、注意事项 7、应用场景 8、优缺点 9、总结 1、前言 在 C# 和 C 应用程序之间进行数据交换时&#xff0c;命名管道&#xff08;Named Pipes…