【发布时间】:2014-03-11 12:21:35
【问题描述】:
我有几个关于存储过程和SqlDataAdapter 的问题:
当我运行适配器的Update 方法时,我知道它将根据表行的RowState 属性在适当的地方调用指定的INSERT、UPDATE 和DELETE 命令。
如果将这些命令设置为存储过程,它是为表中的每一列传递具有正确值的参数,还是传递有问题的表行?
是否必须手动指定所有参数,或者适配器是否知道要传递哪些值?
是否可以在不为每列定义参数的情况下为例如 Insert 制作 sp?
如果传递表格行,sp 应该知道列名和值(或不知道)?
我实际尝试实现的是拥有一个INSERT、一个UPDATE 和一个DELETE 存储过程来处理我数据库中的所有表。在我的应用程序中我必须进行一些数据处理的地方,我会调用数据处理程序来准备必要的参数和值,然后再运行adapter.Update()。
不可能、糟糕的方法还是出色的方法?
【问题讨论】:
-
显示您的代码到目前为止您尝试过的内容。
-
"have one Insert-, one Update- and one Delete-stored proc"在我看来处理所有表格听起来是个坏主意。您打算如何以通用方法处理关系数据。我假设您将拥有特定于每个实体的业务逻辑,因此您将进入以下领域:如果是这张表,则执行此操作,如果是该表,请执行其他操作。我会把它们都分开和合乎逻辑的。 -
在我看来是一个糟糕的设计。一个存储过程来处理所有表的所有
INSERT?祝你好运!这将是处理所有情况的一大堆代码,如果您必须添加两个、五个、二十个新表,请考虑一下维护噩梦...... . 您应该研究单一职责原则 - 每段代码都应该只做一件事。 -
真的吗?我看不出这可能是哪些“案例”。在我的 DataHandler 中,无论数据来自哪个表,我都会按照某个标准准备数据并执行插入或更新。如果我必须为每个表存储四个存储过程(我有 150 个),我会看到一个巨大的混乱。也许我没有意识到所有的陷阱......
标签: c# sql-server ado.net sqldataadapter