diff --git a/DbClass/Map.cs b/DbClass/Map.cs index cb23cc9..05e3902 100644 --- a/DbClass/Map.cs +++ b/DbClass/Map.cs @@ -1,7 +1,7 @@ namespace OMS.NET.DbClass { [Table("map_data")] - public class Map : BaseObject + public class Map : SqlTable { [Column("id", true)] // Primary Key and Identity false public string Id { get; set; } diff --git a/DbClass/BaseObject.cs b/DbClass/SqlHelper.cs similarity index 65% rename from DbClass/BaseObject.cs rename to DbClass/SqlHelper.cs index d913388..964d745 100644 --- a/DbClass/BaseObject.cs +++ b/DbClass/SqlHelper.cs @@ -1,8 +1,7 @@ using System.Reflection; using MySql.Data.MySqlClient; using OMS.NET.Common; -namespace OMS.NET.DbClass -{ +namespace OMS.NET.DbClass{ [AttributeUsage(AttributeTargets.Class, Inherited = false)] public class TableAttribute : Attribute { @@ -27,15 +26,15 @@ namespace OMS.NET.DbClass IsIdentity = isIdentity; } } - public class BaseObject - { - private static string GetTableName(Type type) + + public class SqlHelper{ + public static string GetTableName(Type type) { var attr = type.GetCustomAttribute(); return attr?.TableName ?? throw new Exception($"{type.Name} 没有指定数据表"); } - private static IEnumerable GetProperties(Type type) + public static IEnumerable GetProperties(Type type) { return type.GetProperties() .Where(p => p.GetCustomAttribute() != null); @@ -72,7 +71,7 @@ namespace OMS.NET.DbClass return (primaryKey.GetCustomAttribute()!.IsIdentity == true) ? null : primaryKey; } - private static string GetInsertSql(Type type) + public static string GetInsertSql(Type type) { var tableName = GetTableName(type); var identityKey = GetIdentityKeyProperty(type); @@ -91,7 +90,7 @@ namespace OMS.NET.DbClass return $"INSERT INTO {tableName} ({string.Join(", ", columns)}) VALUES ({string.Join(", ", values)})"; } - private static string GetUpdateSql(Type type) + public static string GetUpdateSql(Type type) { var tableName = GetTableName(type); var setClause = string.Join(", ", @@ -103,7 +102,7 @@ namespace OMS.NET.DbClass return $"UPDATE {tableName} SET {setClause} WHERE {whereClause}"; } - private static string GetDeleteSql(Type type) + public static string GetDeleteSql(Type type) { var tableName = GetTableName(type); var primaryKey = GetPrimaryKeyProperties(type); @@ -112,7 +111,7 @@ namespace OMS.NET.DbClass return $"DELETE FROM {tableName} WHERE {whereClause}"; } - private static string GetSelectSql(Type type) + public static string GetSelectSql(Type type) { var tableName = GetTableName(type); var columns = string.Join(", ", @@ -122,7 +121,7 @@ namespace OMS.NET.DbClass return $"SELECT {columns} FROM {tableName}"; } - private static string GetSelectSqlWithPrimaryKey(Type type) + public static string GetSelectSqlWithPrimaryKey(Type type) { var tableName = GetTableName(type); var columns = string.Join(", ", @@ -134,59 +133,7 @@ namespace OMS.NET.DbClass return $"SELECT {columns} FROM {tableName} WHERE {whereClause}"; } - public void Test() - { - Console.WriteLine("===========this is a test area================="); - Console.WriteLine(GetInsertSql(GetType())); - Console.WriteLine(GetDeleteSql(GetType())); - Console.WriteLine(GetUpdateSql(GetType())); - Console.WriteLine(GetSelectSql(GetType())); - Console.WriteLine(GetSelectSqlWithPrimaryKey(GetType())); - Console.WriteLine("===========this is a test area================="); - } - - public virtual void Insert() - { - var type = GetType(); - var insertSql = GetInsertSql(GetType()); - using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName); - connection.Open(); // 确保在执行命令之前打开连接 - using var command = new MySqlCommand(insertSql, connection); - AddParameters(command); - Console.WriteLine($"SQL: {command.CommandText}"); - foreach (MySqlParameter param in command.Parameters) - { - Console.WriteLine($"Parameter: {param.ParameterName}, Value: {param.Value}"); - } - command.ExecuteNonQuery(); - Log.Info($"{GetTableName(type)}数据表插入({string.Join(',', ShowDetail())})"); - } - - public virtual void Update() - { - var type = GetType(); - var updateSql = GetUpdateSql(GetType()); - using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName); - connection.Open(); // 确保在执行命令之前打开连接 - using var command = new MySqlCommand(updateSql, connection); - AddParameters(command); - command.ExecuteNonQuery(); - Log.Info($"{GetTableName(type)}数据表修改({string.Join(',', ShowDetail())})"); - } - - public virtual void Delete() - { - var type = GetType(); - var deleteSql = GetDeleteSql(GetType()); - using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName); - connection.Open(); // 确保在执行命令之前打开连接 - using var command = new MySqlCommand(deleteSql, connection); - AddParameters(command); - command.ExecuteNonQuery(); - Log.Info($"{GetTableName(type)}数据表删除({string.Join(',', ShowDetail())})"); - } - - public static IEnumerable SelectAll() where T : BaseObject, new() + public static IEnumerable SelectAll() where T : SqlTable, new() { var type = typeof(T); var selectSql = GetSelectSql(type); @@ -205,7 +152,21 @@ namespace OMS.NET.DbClass return results; } - public static T? Get(object key) where T : BaseObject, new() + private static void PopulateObject(MySqlDataReader reader, SqlTable obj) + { + var type = obj.GetType(); + foreach (var property in GetProperties(type)) + { + var columnAttr = property.GetCustomAttribute()!; + var value = reader[columnAttr.ColumnName]; + if (value != DBNull.Value) + { + property.SetValue(obj, Convert.ChangeType(value, property.PropertyType)); + } + } + } + + public static T? Get(object key) where T : SqlTable, new() { var type = typeof(T); var selectSql = GetSelectSqlWithPrimaryKey(type); @@ -223,33 +184,5 @@ namespace OMS.NET.DbClass } return null; } - - private void AddParameters(MySqlCommand command) - { - foreach (var property in GetProperties(GetType())) - { - //var columnAttr = property.GetCustomAttribute()!; - command.Parameters.AddWithValue("@" + property.Name, property.GetValue(this)); - } - } - - private IEnumerable ShowDetail() - { - return GetProperties(GetType()).Select(p => $"{p.Name}={p.GetValue(this)}"); - } - - private static void PopulateObject(MySqlDataReader reader, BaseObject obj) - { - var type = obj.GetType(); - foreach (var property in GetProperties(type)) - { - var columnAttr = property.GetCustomAttribute()!; - var value = reader[columnAttr.ColumnName]; - if (value != DBNull.Value) - { - property.SetValue(obj, Convert.ChangeType(value, property.PropertyType)); - } - } - } } } \ No newline at end of file diff --git a/DbClass/SqlTable.cs b/DbClass/SqlTable.cs new file mode 100644 index 0000000..dca910b --- /dev/null +++ b/DbClass/SqlTable.cs @@ -0,0 +1,74 @@ +using System.Reflection; +using MySql.Data.MySqlClient; +using OMS.NET.Common; +namespace OMS.NET.DbClass +{ + public class SqlTable + { + public void Test() + { + Console.WriteLine("===========this is a test area================="); + Console.WriteLine(SqlHelper.GetInsertSql(GetType())); + Console.WriteLine(SqlHelper.GetDeleteSql(GetType())); + Console.WriteLine(SqlHelper.GetUpdateSql(GetType())); + Console.WriteLine(SqlHelper.GetSelectSql(GetType())); + Console.WriteLine(SqlHelper.GetSelectSqlWithPrimaryKey(GetType())); + Console.WriteLine("===========this is a test area================="); + } + + public virtual void Insert() + { + var type = GetType(); + var insertSql = SqlHelper.GetInsertSql(GetType()); + using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName); + connection.Open(); // 确保在执行命令之前打开连接 + using var command = new MySqlCommand(insertSql, connection); + AddParameters(command); + Console.WriteLine($"SQL: {command.CommandText}"); + foreach (MySqlParameter param in command.Parameters) + { + Console.WriteLine($"Parameter: {param.ParameterName}, Value: {param.Value}"); + } + command.ExecuteNonQuery(); + Log.Info($"{SqlHelper.GetTableName(type)}数据表插入({string.Join(',', ShowDetail())})"); + } + + public virtual void Update() + { + var type = GetType(); + var updateSql = SqlHelper.GetUpdateSql(GetType()); + using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName); + connection.Open(); // 确保在执行命令之前打开连接 + using var command = new MySqlCommand(updateSql, connection); + AddParameters(command); + command.ExecuteNonQuery(); + Log.Info($"{SqlHelper.GetTableName(type)}数据表修改({string.Join(',', ShowDetail())})"); + } + + public virtual void Delete() + { + var type = GetType(); + var deleteSql = SqlHelper.GetDeleteSql(GetType()); + using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName); + connection.Open(); // 确保在执行命令之前打开连接 + using var command = new MySqlCommand(deleteSql, connection); + AddParameters(command); + command.ExecuteNonQuery(); + Log.Info($"{SqlHelper.GetTableName(type)}数据表删除({string.Join(',', ShowDetail())})"); + } + + private void AddParameters(MySqlCommand command) + { + foreach (var property in SqlHelper.GetProperties(GetType())) + { + command.Parameters.AddWithValue("@" + property.Name, property.GetValue(this)); + } + } + + private IEnumerable ShowDetail() + { + return SqlHelper.GetProperties(GetType()).Select(p => $"{p.Name}={p.GetValue(this)}"); + } + + } +} \ No newline at end of file