千家信息网

C# SQL封装(四)

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇接C# SQL封装(三)在其功能上继续扩展 改操作 , 让我们开始吧。。。。。一 : 构建T-SQL语句(在SQL_Structure.cs中添加一个方法 UPDATE_T_SQL , 用于构建u
千家信息网最后更新 2026年11月01日C# SQL封装(四)

本篇接C# SQL封装(三)

在其功能上继续扩展 改操作 , 让我们开始吧。。。。。

一 : 构建T-SQL语句(在SQL_Structure.cs中添加一个方法 UPDATE_T_SQL , 用于构建update的T-SQL)

        ///         /// 更新一条数据的T-SQL构成(以id号来删除)        ///         ///         /// 原始model        /// 更改后的model        ///         public static string UPDATE_T_SQL(T model , T model_change) where T : BaseModel        {            Type model_type = model.GetType();            Type model_change_type = model_change.GetType();            if (model_type.Name == model_change_type.Name)            {                string base_update = @"update [{0}] set {1} where {2} = @{3}";                string[] arr = model_type.Name.Split(new char[] { '.' });                string table_name = arr[arr.Length - 1];//获得表的名称                PropertyInfo[] p_intos = model_type.GetProperties();                PropertyInfo item = null;                PropertyInfo item_change = null;                string item_value = string.Empty;                string item_change_value = string.Empty;                StringBuilder update_set = null;                for (int i = 0; i < p_intos.Length; i++)                {                    item = p_intos[i];                    item_change = model_change_type.GetProperty(item.Name);                    item_value = item.GetValue(model, null).ToString();                    item_change_value = item_change.GetValue(model_change, null).ToString();                    if (item.Name == "id")                    {                        //比较id值是否一致                        if (item_value != item_change_value)                        {                            throw new Exception(                                string.Format("model类 id : {0} 与model_change类id:{1} 不一致,请确保是同一条数据",                                    item_value,                                    item_change_value                                )                                );                        }                    }                    else                    {                        if (item_value != item_change_value)                        {                            if (update_set == null) update_set = new StringBuilder();                            update_set.Append(                                string.Format( @" {0} = @{1}," , item.Name , item.Name )                                );                        }                    }                }                if (update_set != null)                {                    return string.Format( base_update,                        table_name,                        update_set.ToString().Substring(0, update_set.ToString().Length - 1),                        "id",                        "id"                        );                }                else                {                    return string.Empty;//不存在更新                }            }            else            {                throw new Exception(                    string.Format("model类 : {0} 与model_change类 :{1} 不匹配",                        model_type.Name ,                        model_change_type.Name                        )                    );            }        }

二 : 构建SqlParameter参数 (在SqlParameter_Structure.as中添加方法UPDATE_T_SQL)

        ///         /// 构建T-SQL参数 UPDATE        ///         ///         /// 原model        /// 更改后model        ///         public static SqlParameter[] UPDATE_T_SQL(T model, T model_change) where T : BaseModel        {            Type model_type = model.GetType();            Type model_change_type = model_change.GetType();            if (model_type.Name == model_change_type.Name)            {                PropertyInfo[] p_intos = model_type.GetProperties();                PropertyInfo item = null;                PropertyInfo item_change = null;                string item_value = string.Empty;                string item_change_value = string.Empty;                List sql_param = null;                SqlParameter cell = null;                bool is_change_model = false;//是否有字段进行了更改                for (int i = 0; i < p_intos.Length; i++)                {                    item = p_intos[i];                    item_change = model_change_type.GetProperty(item.Name);                    item_value = item.GetValue(model, null).ToString();                    item_change_value = item_change.GetValue(model_change, null).ToString();                    if (item.Name == "id")                    {                        if (item_value != item_change_value)                        {                            throw new Exception(                                string.Format("model类 id : {0} 与model_change类id:{1} 不一致,请确保是同一条数据",                                    item_value,                                    item_change_value                                )                                );                        }                        else                        {                            if (sql_param == null) sql_param = new List();                            cell = new SqlParameter(item.Name, SqlParameter_Structure.Get_SqlDbType_SqlType(item.PropertyType));                            cell.Value = item.GetValue(model, null);                            sql_param.Add(cell);                        }                    }                    else                    {                        if (item_value != item_change_value)                        {                            if (!is_change_model) is_change_model = true;                            if (sql_param == null) sql_param = new List();                            cell = new SqlParameter(item_change.Name, SqlParameter_Structure.Get_SqlDbType_SqlType(item_change.PropertyType));                            cell.Value = item_change.GetValue(model_change, null);//加入改变的值                            sql_param.Add(cell);                        }                    }                }                if (is_change_model)                {                    return sql_param.ToArray();                }                else                {                    return null;//没有任何字段更改                }            }            else            {                throw new Exception(                    string.Format("model类 : {0} 与model_change类 :{1} 不匹配",                        model_type.Name,                        model_change_type.Name                        )                    );            }        }

测试:

测试代码


//------------------------模拟一条重数据库得到的数据 begin ---------------------------------------
User kayer_ori = new User();
kayer_ori.id = 3;
kayer_ori.name = "kayer";
kayer_ori.sex = 1;
kayer_ori.lv = 1;
kayer_ori.username = "Kayer";
kayer_ori.userpwd = "123";
//------------------------模拟一条重数据库得到的数据 end -----------------------------------------
//拷贝一条kayer_ori数据 ( 可以用原型模式 , 这里我直接使用笨办法 )
User kayer_change_copy = new User();
kayer_change_copy.id = kayer_ori.id;
kayer_change_copy.name = kayer_ori.name;
kayer_change_copy.sex = kayer_ori.sex;
kayer_change_copy.lv = kayer_ori.lv;
kayer_change_copy.username = kayer_ori.username;
kayer_change_copy.userpwd = kayer_ori.userpwd;
// --- 改变数据 ---
kayer_change_copy.name = "Aonaufly";
kayer_change_copy.lv = 4;
string sql_update = SQL_Structure.UPDATE_T_SQL(kayer_ori, kayer_change_copy);
SqlParameter[] update_p = SqlParameter_Structure.UPDATE_T_SQL(kayer_ori, kayer_change_copy);
int i = SqlHelper.ExecteNonQuery(CommandType.Text, sql_update, update_p);
if (i > 0)
{
Console.WriteLine("执行操作成功");
}
else
{
Console.WriteLine("执行操作失败");
}


结果 :

在数据库中:


未完待续 ..........................


数据 一致 数据库 参数 字段 方法 更新 测试 C# 封装 原始 成功 代码 办法 功能 原型 名称 拷贝 模式 结果 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 精品咖啡豆 互联网科技公司起名 中关村互联网科技集团 互联网属科技 广州互联网络科技有限公司 深圳天众互联网科技公司 四川狮子座互联网科技 科技与互联网哪个更好 互联网金融中的现代科技 互联网和黑科技的看法 智腾互联网科技有限公司 互联网科技和信息 互联网在线教育科技创业 四川慕妮娅互联网科技有限公司 互联网科技如何创业 锡山区互联网智能科技产品供应 伍佰万互联网科技怎么赚钱 广州千川互联网科技有限公司 陕西彩京云互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 云南咖啡 西安纸贵互联网科技有限公司 美国互联网科技 上海致骋互联网科技 互联网科技素材视频竖屏 贵州叶脉互联网科技有限公司所属行业 互联网科技人工智能实验室 燊美集互联网科技有限公司 工业互联网山东科技大学 宁波允成互联网科技有限公司
0