我有一個非常奇怪的問題,我似乎無法找到解決方案。我有一個帶有一組參數的SqlDataSource和一個存儲過程形式的select命令。其中一個參數是一個名爲@SearchPhrase的字符串,它從一個文本框中獲取它的值,當它爲空時,它將返回所有文章。該參數通過搜索按鈕獲取其值,該按鈕首先將searchBox.Text.Trim()的值設置爲@SearchPhrase,然後對顯示搜索結果的gridview進行數據綁定。當字符串爲空時,存儲過程不執行
只要在文本框中輸入一個值,存儲過程就會正常工作,並返回結果,但是如果留空,則會導致存儲過程從不執行。我知道這是因爲我已經添加了一條線,它存儲了每次調用時插入的所有參數。
如何在沒有在文本框中輸入內容的情況下無法運行它?我可以執行的唯一方法是輸入一個空格並將「」傳遞給存儲過程,然後在其上進行左右修剪。爲什麼不傳遞一個長度爲0的字符串?
下面是數據源的代碼和參數的分配。這只是導致問題的@SearchPhrase參數,其餘的工作都很好。點擊事件的前三行(註釋)是如果我想分配一個「」並且以這種方式使其工作的話,那麼有點難看。
<asp:SqlDataSource ID="enterprisesDS" runat="server"
ConnectionString="<%$ ConnectionStrings:CRMdb %>"
SelectCommand="entGetEnterprises" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:Parameter Name="SearchPhrase" Type="String" />
<asp:Parameter Name="IsActive" Type="Boolean" DefaultValue="true" />
<asp:Parameter Name="Country" Type="Byte" />
<asp:Parameter Name="LocalReference" Type="String" />
<asp:Parameter Name="Class" Type="String" />
<asp:Parameter Name="LocationID" Type="Byte" />
</SelectParameters>
</asp:SqlDataSource>
protected void search_Click(object sender, EventArgs e)
{
//string searchPhrase = " ";
//if (searchBox.Text.Trim().Length > 0)
// searchPhrase = searchBox.Text.Trim();
enterprisesDS.SelectParameters["SearchPhrase"].DefaultValue = searchBox.Text;
enterprisesDS.SelectParameters["Country"].DefaultValue = countries.SelectedValue;
enterprisesDS.SelectParameters["LocalReference"].DefaultValue = localReferences.SelectedValue;
enterprisesDS.SelectParameters["Class"].DefaultValue = classes.SelectedValue;
string locID = "0";
if (locations.SelectedValue != null)
locID = locations.SelectedValue;
enterprisesDS.SelectParameters["LocationID"].DefaultValue = locID;
enterprises.DataBind();
}
更多的代碼,少文字將是巨大的;) –
我已經添加使用的代碼,但不幸的是需要的文本。 ;) – vsdev