簡體   English   中英

將空白字段值傳遞給存儲過程ASP .NET C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM