我有多个字段:asp:DropDownList和asp:TextBox。我还有许多用户角色可以更改某些控件的Visible属性,因此用户无法编辑它们。所有这些数据都通过PostBack上的存储过程调用保存。问题是当我发送参数并且控件不在页面上时显然没有它的值,所以在存储过程中我将参数初始化为null。但是,那么我想要更改的数据库中的先前值将被null覆盖。
这似乎是一个非常常见的问题,但我没有很好的解释方法。 所以我的问题是,我应该如何保持某些字段不在页面上,而且还要使用一个存储过程保存数据库中的值?
答案 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)
一般来说,在我的更新功能中克服这一点
这样我就可以获得所有当前的内容以及所有已更改的内容。
此逻辑也适用于添加表单,因为所有字段都将为null,然后在发送到db之前替换为新值。您当然只需要检查是否进行插入或更新。