MVC LINQ中用封装的TSQL通用更新方法
今天用LINQ的update出现问题了,LINQ的BUG不少,呵呵,所以自己把TSQL拿出来,做了一个封装,适用的所有表,更新有两种,普通更新和记数更新
看代码:这两个方法是写在DAL里的数据操作基类里的,只有它的子类可以用它,所以用protected做为限制
/// <summary>
/// 通用更新方法
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="param">参数列表,奇数为字段,偶数为他前一奇数对应的值,索引0为要更新的主键,1为主键值</param>
protected virtual void Update(string tableName, params object[] param)
{
StringBuilder sbSql = new StringBuilder();
List<object> listParasm = new List<object>();
listParasm.Add(param[0]);
listParasm.Add(param[1]);
int index = listParasm.Count;
sbSql.AppendFormat("UPDATE [{0}] SET ", tableName);
if (index == 0)
{
return;
}
else
{
for (int i = 2; i < param.Count(); i += 2)
{
if (param[index + 1].GetType() == typeof(string))
sbSql.AppendFormat("{{{0}}} = '{{{1}}}',", index, index + 1);
else
sbSql.AppendFormat("{{{0}}} = {{{1}}},", index, index + 1);
listParasm.Add(param[index]);
listParasm.Add(param[index + 1]);
index++;
index++;
}
sbSql.Remove(sbSql.Length - 1, 1);//移除最后一个逗号
}
sbSql.Append(" WHERE [{0}] = {1}");
db.ExecuteCommand(sbSql.ToString(), listParasm.ToArray());
}
/// <summary>
/// 计数更新
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="param">参数列表,索引0为主键名,1表主键值,2为要计数的字段,3为增量</param>
protected virtual void UpdateForCount(string tableName, params object[] param)
{
string sql = "update [{0}] set [{3}]=[{3}]+{4} where [{1}]={2}";
List<object> listParasm = new List<object>
{
tableName,
param[0],
param[1],
param[2],
param[3],
};
db.ExecuteCommand(string.Format(sql, listParasm.ToArray()));
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示