2016-01-20 150 views
0

我被困在試圖修復這個錯誤,並且一直在它太久。我做了很多谷歌搜索和搜索這個網站,但似乎無法爲我找到正確的答案,即使這個問題有很多不同的變體。SQL將Access數據庫空值轉換爲空字符串

我正在寫一個前端GUI,使用VB.Net和後端的Access數據庫。該數據庫在我的合作伙伴表中的PartnerFirstName,PartnerLastNameOrganization中有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 s爲,因爲我想搜索實時基於窗體的文本框的值更新。這是我的問題的來源,因爲它們默認爲空白,而數據庫有空值。

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

編輯:

感謝的初步意見。我現在意識到我正在使用不正確的功能。 Baro建議的IIF現在讓我通過SQL,這非常棒!

看來我遇到的記錄沒有顯示的問題在我的WHERE子句中。如果我刪除它,那麼所有記錄都會加載到我的Datatable中。當我如圖所示包含Where子句時,記錄將排除NULL值。

我試過使用OR PartnerFirstName IS NULL(以及其他字段),但是會留下太多額外的結果,也有NULL值。我不知道該怎麼做才能進行搜索,現在我知道問題出在聲明的Where部分。

+0

它是SQL Server還是Access?它們不是同一件事。您鏈接的MSDN文章適用於SQL Server。在Access中,相當於Nz函數。 – Rabbit

+1

嘗試:IIF(ISNULL(PartnerFirstName),'',PartnerFirstName)...然後糾正您的第一個錯誤,您錯過了「AND」。 – Baro

+0

您需要查看針對Access執行的查詢;訪問沒有第二個參數ISNULL – techspider

回答

0

感謝大家的幫助和建議,我從這幾個建議中學到了很多,真的很感激!

我已經通過回到Access來解決問題。我在任何NULL字段上運行更新查詢並將其更改爲「」。這樣簡單的解決方案!

如果我沒有WHERE要求,那麼我做這件事就不會有這麼大的事。

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) 
+0

感謝蒂姆,我解決了這個問題,在我的數據庫中運行更新查詢來更新所有NULL字段爲「」。 NULLS在近期轉入我們的新系統期間將壞數據帶入表中的結果。 「 – mrmiller1023

+0

NULL和」「意味着兩個完全不同的東西,所以簡單地將NULL更新爲」「會改變數據的含義。在你的情況下,它表示「我們問那個人,他說他沒有合作伙伴」,因爲NULL _COULD_的意思是「哦,廢話,我們忘了問。」 – Jeroen

+0

Jeroen, 我得到你在說什麼,我知道NULL和「」之間的區別。在這種情況下,我一直在使用這個數據庫6年,並正在重新設計它。雖然我認識到這兩種類型之間的差異「」足以滿足我們在這裏所做的工作。 – mrmiller1023