2017-01-22 17 views
1

我創建了一個ASP.NET網頁用C#和SQL Server 2014SQL查詢不會顯示所有記錄,如果機器人性判據爲空或「」

我有一個GridView1SqlDataSource具有SELECT與查詢網頁上控件的2個標準。

兩者都是具有Decimal(18,0)值的DropDownLists。

我想設置一個WHERE條款,這樣的GridView將返回:

  • 所有記錄,如果這兩個條件爲空或
  • 如果條件之一滿足,節目記錄只用這個標準,其他標準爲空或
  • 如果這兩個條件都滿足,同時使用標準

某種級聯濾波器的演出紀錄。

我想這(在頁面加載):

if (!Page.IsPostBack) 
{ 
    GridView1.DataBind(); 
} 

DropDownList1DropDownList2同時設置:

AppendDataBoundItems="True" and <asp:ListItem Text="" Value="" /> 

因此DDL控件不包含在頁面加載的任何值或文本。

在這種情況下,我預計GridView1顯示我所有的記錄 - 但它什麼也沒有顯示。

SQL查詢語句是:

SELECT.... 
WHERE 
    ([rentnr] = @rentnr) AND ([apartman] = @apartman) 
    OR ([apartman]= @apartman) AND (@rentnr IS NULL) 
    OR ([rentnr] = @rentrn) AND (@apartman IS NULL) 
    OR (@rentnr IS NULL) AND (@apartman IS NULL) 
  • @rent是數據從DDL1
  • @apartman從DDL2

是數據我在做什麼錯?

我感謝您的幫助,謝謝。

+1

有趣。我再次看到'([apartman] = @apartman)和(@rentnr IS NULL)'。提醒一下,如果使用像這樣的查詢,您可能會遇到錯誤的查詢計劃。使用動態查詢可以避免這個問題。請參閱kimberly的博客關於此:http://www.sqlskills.com/blogs/kimberly/high-performance-procedures/ – zhongxiao37

+0

嗨馬克,謝謝你的建議。英語不是我的母語,所以我的語法很差,因爲我很匆忙,我的文本是一樣的。編程是我的愛好,我是初學者,使用谷歌搜索和翻譯自學。所以,請諒解我的立場。我很樂意學習,並感謝您的幫助。感謝您的鏈接,我會閱讀它。此外,我創建了一個新的gridview並只設置了一個條件 - dropdownlist的值爲null或者只是空字符串。如果dropdownlist沒有任何價值,我又不能顯示所有記錄。 – jastog

回答

0

我想這是你想要的邏輯:

WHERE ([rentnr] = @rentnr OR @rentnr IS NULL OR @rentnr = '') AND 
     ([apartman] = @apartman OR @apartman IS NULL OR @partman = '') 
+0

嗨戈登,剛剛嘗試過你的代碼,但又一次。在頁面加載時GV中沒有記錄,因asp:代碼中的asp:ListItem Text =「」Value =「」導致DDL爲空。我在第一個DDL和gridview DataBind上選擇數字,但在gridview中沒有記錄。然後我在第二個DDL中選擇數字,最後GV顯示過濾的記錄。但沒有我的目標,希望頁面加載和級聯篩選的所有記錄...任何建議 - tnx – jastog

+0

而不是'IS NULL'使用'=''' –

+0

嗨克雷格,同樣,使用後「」在查詢生成器VS2012時用「」系統顯示錯誤嘗試單元格的錯誤無效,因爲值無法識別爲有效。正如我所說,必須是十進制的......但如果我使用NULL,再次沒有... – jastog

1

如何:

SELECT.... 
WHERE 
    (([rentnr] = @rentnr) AND ([apartman] = @apartman)) 
    OR (([apartman]= @apartman) AND (@rentnr IS NULL)) 
    OR (([rentnr] = @rentrn) AND (@apartman IS NULL)) 
    OR ((@rentnr IS NULL) AND (@apartman IS NULL)) 

注意,我添加了額外的()爲條件組。

@rentnr和@apartman在未填寫時可能會傳遞給SQL,而不是NULL,而是0,因爲您說DDL將它們列爲小數。然後,你需要一個更OR條件:

OR ((@rentnr = 0) AND (@apartman = 0)) 

HTH

+0

嗨安德魯斯,謝謝你的代碼。實現後,它可以在Visual Studio /配置數據源窗口中進行測試或編輯查詢。就像我以前所期望的那樣工作。但是,當我從瀏覽器運行它的問題沒有解決。在頁面加載時DDL是空的,GV不顯示所有記錄 - 什麼也沒有顯示!如果我只在一個DDL裏面選擇一些值就什麼都沒有。如果我僅在這種情況下選擇兩個DDL值,則會顯示記錄。正如我對Marc的上述評論感到難過,我在DDL中只用一個條件測試了一個新的GV - 得到了相同的行爲。 – jastog

+0

@jastog感謝您的更新。您只需要查看DDL爲空時GV發送給SQL的內容。這可以通過SQL Server Profiler輕鬆完成。你有沒有安裝SQL Server Management Studio + Profiler? – andrews

+0

嗨安德魯斯,不,我沒有安裝Profiler,但我會做到這一點。我這一刻,我很高興,我發現了一個解決方案:CancelSelectOnNullParameter =「false」在asp代碼中添加到SqlDataSource。經過幾天的挫折!親切的問候! – jastog

1

終於讓我找到一個解決方案here。 關鍵是CancelSelectOnNullParameter =「false」!我將它添加到asp:SqlDataSource作爲額外的功能和賓果!

謝謝大家!

相關問題