[英]Passing blank field value to stored procedure ASP .NET C#
如果textBox字段為空,我想將SQL Server 2008數據庫表中的所有行返回到SQL數據源。 所以我使用if @date IS NULL
子句創建了一個存儲過程。
雖然存儲過程似乎在Visual Studio 2008中正常工作,但實際網頁沒有顯示任何結果。
我猜我必須向存儲過程發送一個DBNull
值,如果textBox.Text == string.Empty
。 我嘗試了SqlDataSource1.SelectParameters.Add
但似乎我從DBNull.Value
到字符串的轉換錯誤。
這是我的問題的根源還是我錯過了其他的東西? 如果文本字段為空,我如何將DBNull.Value
傳遞給存儲過程?
您需要確保在SqlDataSource上將CancelSelectOnNullParameter設置為false,並且ConvertEmptyStringToNull對於所需參數為true。 它應該在標記中看起來像這樣:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" CancelSelectOnNullParameter="false" SelectCommand="...">
<SelectParameters>
<asp:ControlParameter Name="..." ControlID="..." PropertyName="..." DbType="..." ConvertEmptyStringToNull="true"/>
...
</SelectParameters>
</asp:SqlDataSource>
如果您有多個可以提供空值的Control並且您只想允許其中一個為null,則問題將開始。 在這種情況下,您必須將CancelSelectOnNullParameter設置為true並使用Selecting事件來添加DBNull.Value:
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
if (String.IsNullOrEmpty(textBox.Text))
((IDbDataParameter)e.Command.Parameters["@name"]).Value = DBNull.Value;
}
這應該可以讓你解決你的問題。
您可以在存儲過程中將默認值設置為null,這樣如果文本框為空,您只需要傳遞任何內容,只需在存儲過程參數列表中的參數類型之后執行write = NULL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.