最佳实践 - 处理多个字段,用户角色和一个存储过程

时间:2009-07-24 21:30:42

标签: c# asp.net forms stored-procedures

我有多个字段:asp:DropDownList和asp:TextBox。我还有许多用户角色可以更改某些控件的Visible属性,因此用户无法编辑它们。所有这些数据都通过PostBack上的存储过程调用保存。问题是当我发送参数并且控件不在页面上时显然没有它的值,所以在存储过程中我将参数初始化为null。但是,那么我想要更改的数据库中的先前值将被null覆盖。

这似乎是一个非常常见的问题,但我没有很好的解释方法。 所以我的问题是,我应该如何保持某些字段不在页面上,而且还要使用一个存储过程保存数据库中的值?

4 个答案:

答案 0 :(得分:0)

在选择要更新的数据时,应用相同的逻辑作为您在选择要呈现的数据(及其关联的UI)时实际使用的逻辑。

答案 1 :(得分:0)

我认为问题是您希望在单个SQL更新中更新所有字段,无论其值如何。

我认为您应该在更新之前对输入进行一些完整性检查,即使这意味着对某些参数进行单独更新。

答案 2 :(得分:0)

没有一个例子,知道你的确切情况有点困难,但这是一个虚构的陈述,希望能给你一些想法。它使用的是t-sql(MS SQL Server),因为您没有提到特定版本的SQL:

UPDATE SomeImaginaryTable
SET FakeMoneyColumn = COALESCE(@FakeMoneyValue, FakeMoneyColumn)
WHERE FakeRowID = @FakeRowID

这基本上将列更新为参数值,除非参数为null,在这种情况下它使用列现有值。

答案 3 :(得分:0)

一般来说,在我的更新功能中克服这一点

  1. 我会为用户
  2. 加载当前值
  3. 使用表单
  4. 中新更改的值替换任何已加载的值
  5. 在db。中更新。
  6. 这样我就可以获得所有当前的内容以及所有已更改的内容。

    此逻辑也适用于添加表单,因为所有字段都将为null,然后在发送到db之前替换为新值。您当然只需要检查是否进行插入或更新。