日期:2014-05-17  浏览次数:20442 次

三层设计中关于update的存储过程
我看三层设计的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,你可以吧 条件 和 字段作为动态生成处理。
这样 可以是通用更新。

还有就是 逻辑上的事情 不是代码多少可以决定的。
------解决方案--------------------
通用的东西必定造成效率的低下。。。你说传一长串字符串来的快还是几个值来得快?