三层设计中关于update的存储过程解决方案
三层设计中关于update的存储过程
我看三层设计的asp.net系统中,对数据库的操作都是通过存储过程来执行的。系统只是把变量传递给存储过程。
那么关于新增、删除的存储过程容易实现。但是update就麻烦了。
如果系统在不同的地方会对表的不同字段进行update。那么是不是有几个update就必须写几个存储过程?
这样是不是很麻烦?
为什么不把sql语句(比如 column=值)传递给存储过程呢?这样只需要一个存储过程就可以了
------解决方案--------------------
LIST<T>保存修改属性,遍历形成SQL语句
LINQ操作,修改对象属性
------解决方案--------------------
我看三层设计的asp.net系统中,对数据库的操作都是通过存储过程来执行的。系统只是把变量传递给存储过程。
那么关于新增、删除的存储过程容易实现。但是update就麻烦了。
如果系统在不同的地方会对表的不同字段进行update。那么是不是有几个update就必须写几个存储过程?
这样是不是很麻烦?
为什么不把sql语句(比如 column=值)传递给存储过程呢?这样只需要一个存储过程就可以了
------解决方案--------------------
LIST<T>保存修改属性,遍历形成SQL语句
LINQ操作,修改对象属性
------解决方案--------------------
- C# code
public int Save(ReDS ds) { Database db = DatabaseFactory.CreateDatabase(); // Insert and Update DbCommand insertCommand = db.GetStoredProcCommand(INSERT); DbCommand updateCommand = db.GetStoredProcCommand(UPDATE); // Init DbCommand Object DbCommandHelper.BuildDbCommandParameter(db, insertCommand, ds.Requisition, DataRowVersion.Current); DbCommandHelper.BuildDbCommandParameter(db, updateCommand, ds.Requisition, DataRowVersion.Current); // Execute if (this.dbTransaction != null) return db.UpdateDataSet(ds.GetChanges(), ds.Requisition.TableName, insertCommand, updateCommand, null, (DbTransaction)this.dbTransaction); else return db.UpdateDataSet(ds.GetChanges(), ds.Requisition.TableName, insertCommand, updateCommand, null, UpdateBehavior.Transactional); }
------解决方案--------------------
楼上说的用的 LINQ 可以,那是懒蛋的人写法,
存储过程里可以用事物包含多个UPDATE,你可以吧 条件 和 字段作为动态生成处理。
这样 可以是通用更新。
还有就是 逻辑上的事情 不是代码多少可以决定的。
------解决方案--------------------
通用的东西必定造成效率的低下。。。你说传一长串字符串来的快还是几个值来得快?