using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LB_SmartVision.SQL { public class LB_SqlCommand { /// /// 连接字符串:指定 MySQL 实例和数据库(实际会读取dll.config中的值来更新连接字符串) /// public static string ConnectionString = "Server=localhost;Database=product_mes;Uid=root;Pwd=root;"; /// /// 判断指定列是否存在某值 /// /// 表名 /// 指定列名 /// 指定值 /// /// 值存在True public static bool IsExist(string tableName, string columnName, string value, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL 查询语句,检查指定列是否存在指定的值 string sqlQuery = string.Format("SELECT CASE WHEN EXISTS (SELECT 1 FROM `{0}` " + "WHERE `{1}` = @Value) THEN 1 ELSE 0 END", tableName, columnName); // 创建 MySQL 连接 using (MySqlConnection connection = new MySqlConnection(connectionString)) { // 创建 MySQL 命令 using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // 添加参数,防止 SQL 注入 command.Parameters.AddWithValue("@Value", value); // 打开连接 connection.Open(); // 执行查询并获取结果 int result = Convert.ToInt32(command.ExecuteScalar()); // 如果 result == 1,表示存在该值;否则不存在 return result == 1; } } } /// /// 判断指定表是否存在 /// /// 表名 /// /// 值存在True public static bool IsExistTable(string tableName, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL 查询语句,检查表是否存在 string sqlQuery = $@" SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = @TableName"; // 创建 MySQL 连接 using (MySqlConnection connection = new MySqlConnection(connectionString)) { // 创建 MySQL 命令 using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // 添加表名参数 command.Parameters.AddWithValue("@TableName", tableName); // 打开连接 connection.Open(); // 执行查询并获取结果 int result = Convert.ToInt32(command.ExecuteScalar()); // 如果 result > 0,表示存在该表;否则不存在 return result > 0; } } } /// /// 重命名表 /// /// /// /// /// public static bool RenameTable(string oldTableName, string newTableName, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; if (!IsExistTable(oldTableName)) return false; // MySQL 重命名表语法 string sqlQuery = $"ALTER TABLE `{oldTableName}` RENAME TO `{newTableName}`"; // 创建 MySQL 连接 using (MySqlConnection connection = new MySqlConnection(connectionString)) { // 创建 MySQL 命令 using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // 打开连接 connection.Open(); try { // 执行查询并获取结果 command.ExecuteNonQuery(); return true; } catch { return false; } } } } /// /// 删除指定表 /// /// 表名 /// /// 删除成功True public static bool DeleteTable(string tableName, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL 删除表语句 string sqlQuery = $"DROP TABLE IF EXISTS `{tableName}`"; // 创建 MySQL 连接 using (MySqlConnection connection = new MySqlConnection(connectionString)) { // 创建 MySQL 命令 using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // 打开连接 connection.Open(); try { // 执行删除操作 command.ExecuteNonQuery(); return true; } catch { return false; } } } } /// /// 获取所需的值通过索引指定列的指定值定位到所在行的指定列 /// /// 表名 /// 指定列名 /// 指定列值 /// 所需值的列名 /// /// 所需列值 public static string FindValueFromIndexName(string tableName, string indexName, string indexValue, string columnName, string connectionString = "") { try { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL 查询语句 string sqlQuery = $"SELECT `{columnName}` FROM `{tableName}` WHERE `{indexName}` = @IndexValue"; string resultValue = string.Empty; // 连接数据库并执行查询 using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // 添加参数以防止 SQL 注入 command.Parameters.AddWithValue("@IndexValue", indexValue); // 打开连接 connection.Open(); // 执行查询并获取结果 var result = command.ExecuteScalar(); if (result != null) { resultValue = result.ToString(); } } } return resultValue; } catch { return string.Empty; } } /// /// 删除指定行通过索引指定列的指定值 /// /// 表名 /// 指定列名 /// 指定列值 /// /// 删除成功True public static bool DeleteRowFromIndexName(string tableName, string indexName, string indexValue, string connectionString = "") { try { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; using (MySqlConnection conn = new MySqlConnection(connectionString)) { conn.Open(); // 删除指定行 string deleteQuery = string.Format("DELETE FROM `{0}` WHERE `{1}` = @indexValue", tableName, indexName); using (MySqlCommand cmd = new MySqlCommand(deleteQuery, conn)) { cmd.Parameters.AddWithValue("@indexValue", indexValue); cmd.ExecuteNonQuery(); } // MySQL 中更新行号的写法(假设indexName是自增列) string updateQuery = string.Format(@" SET @row_number = 0; UPDATE `{0}` SET `{1}` = @row_number := @row_number + 1 ORDER BY `{1}`;", tableName, indexName); using (MySqlCommand cmd = new MySqlCommand(updateQuery, conn)) { cmd.ExecuteNonQuery(); } return true; } } catch { return false; } } /// /// 交换指定行的所有值通过索引指定列的指定值 /// /// 表名 /// 列名 /// 交换的列值 /// 被交换的列值 /// /// 交换成功True public static bool SwapRowFromIndexName(string tableName, string swapName, string swapValue1, string swapValue2, string connectionString = "") { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; using (MySqlConnection conn = new MySqlConnection(connectionString)) { conn.Open(); // 开始事务 MySqlTransaction transaction = conn.BeginTransaction(); try { // MySQL 交换行值的写法 string swapQuery = string.Format(@" UPDATE `{0}` SET `{1}` = CASE WHEN `{1}` = @SwapValue1 THEN @SwapTempValue WHEN `{1}` = @SwapValue2 THEN @SwapValue1 WHEN `{1}` = @SwapTempValue THEN @SwapValue2 END WHERE `{1}` IN (@SwapValue1, @SwapValue2, @SwapTempValue);", tableName, swapName); using (MySqlCommand cmd = new MySqlCommand(swapQuery, conn, transaction)) { // 添加参数 cmd.Parameters.AddWithValue("@SwapValue1", swapValue1); cmd.Parameters.AddWithValue("@SwapValue2", swapValue2); cmd.Parameters.AddWithValue("@SwapTempValue", Guid.NewGuid().ToString()); // 执行查询 cmd.ExecuteNonQuery(); } // 提交事务 transaction.Commit(); return true; } catch (Exception ex) { Debug.WriteLine("交换失败,原因是:" + ex.Message.ToString()); // 出现异常时回滚事务 transaction.Rollback(); return false; } } } /// /// 更新指定列的值通过索引指定列的指定值 /// /// /// /// /// /// /// public static bool UpdateValueFromIndexName(string tableName, string oriValue, string newValue, string columnName, string connectionString = "") { // 修正原方法名拼写错误 Updata -> Update if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL 更新语句 string sqlQuery = string.Format("UPDATE `{0}` SET `{1}` = @NewValue WHERE `{1}` = @OriValue", tableName, columnName); // 连接数据库并执行查询 using (MySqlConnection connection = new MySqlConnection(connectionString)) { using (MySqlCommand command = new MySqlCommand(sqlQuery, connection)) { // 参数化查询,防止 SQL 注入 command.Parameters.AddWithValue("@OriValue", oriValue); // 要替换的原始值 command.Parameters.AddWithValue("@NewValue", newValue); // 替换后的新值 // 打开连接 connection.Open(); // 执行更新操作 int rowsAffected = command.ExecuteNonQuery(); return rowsAffected > 0; } } } /// /// 检查数据库是否存在 /// /// /// /// public static bool DatabaseExists(string connectionString, string databaseName) { string query = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = @databaseName"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { connection.Open(); using (MySqlCommand command = new MySqlCommand(query, connection)) { command.Parameters.AddWithValue("@databaseName", databaseName); var result = command.ExecuteScalar(); return result != null; } } } /// /// 创建数据库 /// /// /// /// public static bool CreateDatabase(string connectionString, string databaseName) { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; try { string createQuery = $"CREATE DATABASE IF NOT EXISTS `{databaseName}` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { connection.Open(); using (MySqlCommand command = new MySqlCommand(createQuery, connection)) { command.ExecuteNonQuery(); } } return true; } catch { return false; } } /// /// 删除数据库 /// /// /// /// public static bool DeleteDatabase(string databaseName, string connectionString) { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; // MySQL 删除数据库语句 string dropDatabaseQuery = $"DROP DATABASE IF EXISTS `{databaseName}`"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { // 打开数据库连接 connection.Open(); // 创建 MySqlCommand 对象 using (MySqlCommand cmd = new MySqlCommand(dropDatabaseQuery, connection)) { // 执行删除数据库操作 cmd.ExecuteNonQuery(); Debug.WriteLine("Database dropped successfully."); return true; } } catch (Exception ex) { Debug.WriteLine("Error: " + ex.Message); return false; } } } /// /// 复制表结构和数据 /// /// /// /// /// public static bool CopyDatabaseData(string connectionString, string sourceDatabase, string targetDatabase) { if (string.IsNullOrEmpty(connectionString)) connectionString = ConnectionString; try { // 先创建目标数据库(如果不存在) CreateDatabase(connectionString, targetDatabase); using (var connection = new MySqlConnection(connectionString)) { connection.Open(); // 获取源数据库中所有表的列表 string getTablesQuery = $"SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = @sourceDb"; using (var cmd = new MySqlCommand(getTablesQuery, connection)) { cmd.Parameters.AddWithValue("@sourceDb", sourceDatabase); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { string tableName = reader.GetString(0); Debug.WriteLine($"复制表: {tableName}"); // 关闭reader才能执行后续操作 reader.Close(); // 复制表结构和数据(MySQL 简化写法) string copyTableQuery = $"CREATE TABLE `{targetDatabase}`.`{tableName}` LIKE `{sourceDatabase}`.`{tableName}`; " + $"INSERT INTO `{targetDatabase}`.`{tableName}` SELECT * FROM `{sourceDatabase}`.`{tableName}`;"; using (var cmdCopy = new MySqlCommand(copyTableQuery, connection)) { cmdCopy.ExecuteNonQuery(); } // 重新打开reader继续读取下一个表 reader.NextResult(); } } } } return true; } catch (Exception ex) { Debug.WriteLine($"复制失败: {ex.Message}"); return false; } } /// /// 获取用户数据库列表 /// /// public static List GetUserDatabases() { List databases = new List(); string connectionString = "Server=localhost;Database=user_pt;Uid=root;Pwd=root;"; using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { connection.Open(); string query = @" SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')"; using (MySqlCommand command = new MySqlCommand(query, connection)) using (MySqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { databases.Add(reader["SCHEMA_NAME"]?.ToString()); } } } catch (MySqlException ex) { Debug.WriteLine($"数据库查询失败: {ex.Message}"); } } return databases; } } }