0

我正在编写数据库的前端,将选项显示为组合框。而且我需要能够将空值返回到数据库。

我目前有一个解决方案,它涉及在查询中“伪造”一条记录以填充数据表,然后在null我的更新语句中检测到选择和硬编码(如果已选择该项目)。

--GetDataByAvailableTechs query 
            SELECT     tblLEMSCredentialsId, TechNumber
            FROM         tblLEMSCredentials AS aLEMSCreds
            UNION ALL
            SELECT     '99999' AS Expr1, '<NONE>' AS Expr2

.

            //populate combo box
            BV_LEMSHIPDataSet.tblLEMSCredentialsDataTable dtAvailableTechs = taLEMSCreds.GetDataByAvailableTechs(selectedSerial);  
            cboTechNumber.DataSource = dtAvailableTechs;

.

            //Save back to DB
            if (lemsCredsID == 99999)
            {
                taDevice.UpdateQuery_Restage(null, selectedSerial);
            }
            else
            {
                taDevice.UpdateQuery_Restage(lemsCredsID, selectedSerial);
            }

任何人都可以建议一个更好的方法吗?我需要让应用程序处理另外 5 个类似的字段,并且不想创建多个 if else 版本的更新。

G

4

4 回答 4

3

在过去,我使用过类似的方法,但对 NULL 值使用负数 - 这样您就可以在一个 if 语句中将任何小于零的值视为 NULL。

这假设您在表中的 ID 始终为正数:)

于 2009-02-24T11:18:57.850 回答
2

空对象模式。让它为 UI 返回一个空字符串,并在更新数据库时提供一个方法调用来提取值。在正常情况下,这将返回您的真实值,但 null 对象将覆盖此行为以提供您的 null。

不需要幻数,您只需在将控件绑定到数据源时将此值添加到“可绑定值”的开头。

于 2009-02-24T11:22:27.387 回答
1

您可以将字符串值作为组合框的“空值”,例如:“thenullvalue”,然后将组合框值解析为可为空的 int 类型(int?)。对于正确的选择,您将获得所需的值,对于“空选择”,您将获得 null(将“thenullvalue”解析为 int 将为您提供 null):)

然后将值保存到数据库中,如下所示:

int? lemsCredsID = parseInt(combobox.Value);

 //Save back to DB
taDevice.UpdateQuery_Restage(lemsCredsID, selectedSerial);

根据您的数据库提供程序,您可能还需要将可空类型 null 值转换为 DBNull,如下所示:

taDevice.UpdateQuery_Restage((lemsCredsID==null ? DBNull : (int)lemsCredsID), selectedSerial);

希望这可以帮助。

于 2009-02-24T11:21:41.697 回答
0

如果该值打算为 null,则将 null 传递给数据库将是一个很好的解决方案,这减少了对 null 特殊值的额外逻辑处理,并且可能非常危险和模棱两可。

视图或应用程序层应该能够处理从数据库返回或传递给它的空值。

例如,您可以在绑定控件之前将 null 转换为 string.Empty,也可以在传递到数据库之前将 string.Empty 转换为 null。

于 2009-02-24T11:33:10.700 回答