2011-10-13 56 views
0

在Visual Studio查詢我做調整空字段

SELECT calendar.info, …. , 
calendar.ino AS Expr1, doss.dosno 
FROM calendar INNER JOIN 
doss ON calendar.ino = doss.ino AND calendar.ino = doss.ino 
WHERE (calendar.b_date >= @cboDateFrom) AND (calendar.b_date <= @cboDateTo) AND 
calendar.aguv like @cboUitvoerder) 

它的工作原理,但如果@cboUitvoerder將是空的,我怎樣才能使它發揮作用,這將放棄過去的,所以它會返回所有項目爲領域aguv?

在我的代碼有

private void btnRefresh_Click(object sender, EventArgs e) 
    { 
     string x = cboUitvoerder.SelectedItem.ToString(); 
     this.calendarTableAdapter.Fill(this.togaDataSet.calendar, this.cboDateFrom.Value.Date, this.cboDateTo.Value.Date, x); 
    }` 

回答

2

你可以這樣做:

WHERE (calendar.b_date >= @cboDateFrom) AND (calendar.b_date <= @cboDateTo) 
AND 
((@cboUitvoerder IS NULL) OR (calendar.aguv LIKE @cboUitvoerder)) 
+0

後來我:錯誤\t:爲 'WindowsFormsApplication3.TogaDataSetTableAdapters.calendarTableAdapter.Fill(WindowsFormsApplication3.TogaDataSet.calendarDataTable,System.DateTime的,的System.DateTime,System.DateTime的)' 的最佳重載的方法匹配具有一些無效參數 –

+0

好SQL部分工作嗎?這可能是兩個不同的問題。看看你的編譯時錯誤消息有沒有關於這個錯誤的其他信息 - 通常會有一個輔助消息,告訴你哪個方法參數不正確。它看起來像你,或者有太多的參數,或者你有一個參數類型不正確。 – Rob

+0

上面的SQL是正確的,不會導致該錯誤。該錯誤表明您沒有將正確或足夠的參數傳遞給表格適配器上的填充方法。我懷疑這是因爲映射到cboUitvoerder的參數是一個日期時間,你不能爲它傳入null。 –

0

我認爲你可以使用來自Rob博士SLOUTION,但如果你想傳遞null作爲一個@ cboUitvoerder,你應該使用DBNull.Value,而不是c#null。