2012-05-21 50 views
-1

我有一個非常奇怪的問題,我似乎無法找到解決方案。我有一個帶有一組參數的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(); 
    } 
+1

更多的代碼,少文字將是巨大的;) –

+0

我已經添加使用的代碼,但不幸的是需要的文本。 ;) – vsdev

回答