我试图修复此错误并且已经使用了很长时间。我已经完成了大量的Google搜索并搜索了这个网站,但即使这个问题有很多不同的版本,我也无法为我找到合适的答案。
我正在使用VB.Net编写一个前端GUI,后端有一个Access数据库。数据库在我的合作伙伴表中的PartnerFirstName
,PartnerLastName
和Organization
中包含NULL值。我将这些加载到我的应用程序中的Datatable中,以便用户可以搜索它们。我上周刚刚发现一些合作伙伴(其中包含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
的原因是因为我希望搜索根据表单的文本框值实时更新。这是我的问题的根源,因为默认情况下它们是空白而且DB有空值。
===================
编辑:
感谢最初的评论。我现在意识到我正在使用一个不正确的功能。 Baro建议的IIF让我通过SQL现在很棒!
我的WHERE子句中出现了没有显示记录的问题。如果我删除了那么所有记录加载到我的数据表中。当我包含如图所示的Where子句时,记录将排除NULL值。
我尝试使用OR PartnerFirstName IS NULL
(以及其他字段)但是留下了太多额外的结果,这些结果也有NULL值。我现在无法弄清楚如何允许搜索我知道问题出现在声明的Where部分。
答案 0 :(得分:0)
问题是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)
答案 1 :(得分:0)
感谢所有人的帮助和建议,我从很少的建议中学到了很多东西,真的很感激!
我已经通过返回Access解决了这个问题。我在任何NULL字段上运行了更新查询,并将其更改为“”。这么简单的解决方案!
如果我没有满足WHERE要求,那就不会有这么大的优势。