SQL 将 Access DB 空值转换为空白字符串

SQL Converting Access DB null value to blank string

我一直在尝试修复这个错误,并且已经纠结了太久。我用 Google 搜索了很多次并搜索了这个网站,但似乎无法找到适合我的正确答案,尽管这个问题有很多不同的变体。

我正在使用 VB.Net 和后端的 Access 数据库编写前端 GUI。该数据库在我的合作伙伴 Table 中的 PartnerFirstNamePartnerLastNameOrganization 中具有 NULL 值。我将这些加载到我的应用程序中的数据表中,以便用户可以搜索它们。我上周才发现一些合作伙伴(具有 NULL 值的合作伙伴)没有加载。

代码如下:

("SELECT IDPartner, IIF(ISNULL(PartnerFirstName),'',PartnerFirstName) as PartnerFirstName, IIF(ISNULL(PartnerLastName), '', PartnerLastName) AS PartnerLastName, IIF(ISNULL(Organization), '', Organization) AS Organization, " & _
        "Address1, City, State, Zip, Country, Active " & _
 "FROM tblPartner " & _
 "WHERE IDPartner like '%" & txtPartnerID.Text & "%' AND " & _
 "      PartnerFirstName like '%" & txtFirstName.Text & "%' AND " & _
 "      PartnerLastName like '%" & txtLastName.Text & "%' AND " & _
 "      Organization like '%" & txtOrganization.Text & "%' AND " & _
 "      Address1 like '%" & txtStreet.Text & "%' AND " & _
 "      City like '%" & txtCity.Text & "%' AND " & _
 "      State like '%" & txtState.Text & "%' AND " & _
 "      Zip like '%" & txtZipCode.Text & "%' AND " & _
 "      Country like '%" & txtCountry.Text & "%' " & _
 "ORDER BY IDPartner, partnerlastname, partnerfirstname", cn)

like 的原因是因为我希望搜索根据表单的文本框值实时更新。这是我的问题的根源,因为默认情况下它们是空白并且数据库有空值。

===================

编辑:

感谢最初的评论。我现在意识到我使用了不正确的功能。 Baro 建议的 IIF 让我现在通过了 SQL,这太棒了!

我遇到的记录未显示问题似乎出在我的 WHERE 子句中。如果我删除它,那么所有记录都会加载到我的数据表中。当我如图所示包含 Where 子句时,记录将排除 NULL 值。

我曾尝试使用 OR PartnerFirstName IS NULL(以及其他字段),但这会留下太多额外的结果,这些结果也有 NULL 值。现在我不知道该怎么做才能允许搜索,因为我知道问题出在语句的 Where 部分。

问题是 WHERE 谓词针对的是原始字段,该字段尚未应用 IIF(ISNULL(...)) 表达式。 很难看到,因为您已将 SELECT 语句中的字段别名设置为与基础字段同名。因此,查询正在执行您指示它执行的操作,尽管不是您希望它执行的操作。 为了解决这个问题,我会使用一个子查询将 NULL 值转换为空字符串,然后在外部查询中添加您的 WHERE 谓词。像下面这样的东西应该可以解决问题:

("SELECT q.* FROM (SELECT IDPartner, IIF(ISNULL(PartnerFirstName),'',PartnerFirstName) as PartnerFirstName, IIF(ISNULL(PartnerLastName), '', PartnerLastName) AS PartnerLastName, IIF(ISNULL(Organization), '', Organization) AS Organization, " & _
        "Address1, City, State, Zip, Country, Active " & _
 "FROM tblPartner) q " & _
 "WHERE q.IDPartner like '%" & txtPartnerID.Text & "%' AND " & _
 "      q.PartnerFirstName like '%" & txtFirstName.Text & "%' AND " & _
 "      q.PartnerLastName like '%" & txtLastName.Text & "%' AND " & _
 "      q.Organization like '%" & txtOrganization.Text & "%' AND " & _
 "      q.Address1 like '%" & txtStreet.Text & "%' AND " & _
 "      q.City like '%" & txtCity.Text & "%' AND " & _
 "      q.State like '%" & txtState.Text & "%' AND " & _
 "      q.Zip like '%" & txtZipCode.Text & "%' AND " & _
 "      q.Country like '%" & txtCountry.Text & "%' " & _
 "ORDER BY q.IDPartner, q.partnerlastname, q.partnerfirstname", cn)

感谢大家的帮助和建议,我从这几个建议中学到了很多,真的很感激!

我已经通过返回 Access 解决了问题。我 运行 对任何 NULL 字段进行更新查询并将其更改为“”。如此简单的解决方案!

如果我没有适当的 WHERE 要求,那么我这样做就不会那么重要了。