2011-03-24 30 views
4

我在asp.net中制作了一个WebForm,并且想要显示带有asp的数据的gridview:SqlDataSource
我的问题变为当我尝试跳过(传递null)一些参数。在WebForm中跳过SqlDataSource中sql参数的设置值

这里是我的代码

在aspx文件SqlDataSource的一些片段看起来像

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ApplicationServices %>" 
     SelectCommand="art_bat_art" SelectCommandType="StoredProcedure"> 
     <SelectParameters> 
      <asp:Parameter Name="art_naz" DefaultValue="HLA" ConvertEmptyStringToNull="true" Type="String" /> 
      <asp:Parameter Name="art_sifra"  DbType="String" Direction="Input"/> 
      <asp:Parameter Name="vrsta_id" DefaultValue="3" ConvertEmptyStringToNull="true" Type="Int32" />  
      <asp:Parameter Name="podvrsta_id" DefaultValue="13" ConvertEmptyStringToNull="true" 
       Type="Int32" /> 
      <asp:Parameter Name="podgrupa2" DefaultValue="1365" ConvertEmptyStringToNull="true" Type="Int32"  /> 
      <asp:Parameter Name="podosobine" DefaultValue="1:9241" ConvertEmptyStringToNull="true" 
       Type="String" /> 
      <asp:Parameter Name="podosobineOR" DefaultValue="true" ConvertEmptyStringToNull="true" 
       Type="Boolean" /> 
     </SelectParameters> 

我的网格看起来是这样的:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     DataKeyNames="id" DataSourceID="SqlDataSource1"> 

和麻烦进来后面的代码 的一个我的存储过程的参数是可选的,如果我在SQL中将它作为null传递,则存储过程是 ,无论如何。

我试图跳过并传递参数如下

public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 


     } 
     protected void Button1_Click1(object sender, EventArgs e) 
     { 
      SqlDataSource1.SelectParameters["art_sifra"].DefaultValue = DBNull.Value; //Cannot implicitly convert type 
      SqlDataSource1.SelectParameters["art_sifra"].DefaultValue = System.Data.SqlTypes.SqlString.Null; //Cannot implicitly convert type 
      SqlDataSource1.SelectParameters["art_sifra"].DefaultValue = System.Data.SqlTypes.SqlString.Null.ToString(); //IT compiles but i get NULL as text in SQL 
      //IF I Just skip seting of this parametar, My SqlDataSource won't call stored proce 
      SqlDataSource1.SelectParameters["art_sifra"].DefaultValue = string.Empty; //Again no execution of stored proce 
      //Even if I call SqlDataSource1.DataBind(); //nothing cames to sql 
      GridView1.DataBind(); 
     } 
    } 

回答

6

您必须编辑SQL(或存储过程)才能处理可选参数。

即:如果您有:
SELECT blah FROM yourTable WHERE art_sifra = @art_sifra

将其更改为:
SELECT blah FROM yourTable WHERE (art_sifra = @art_sifra OR @art_sifra = '')

,然后就改变ConvertEmptyStringToNull="false"和你选择的参数设置为""SqlDataSource1.SelectParameters["art_sifra"].DefaultValue = "";

还需要在您的数据源上设置CancelSelectOnNullParameter="false"

1
DBNull.Value; //Cannot implicitly convert type 

您是否尝试过铸造的呢?例如。

DBNull.Value.Tostring() 
+0

SqlDataSource1.SelectParameters [“art_sifra”]。DefaultValue = DBNull.Value.ToString();根本不要调用存储过程。我没有得到任何错误,但我也没有得到任何数据 – adopilot 2011-03-24 11:07:24

+0

@adopilot:你想发布你的存储过程,所以我们可以检查正在处理NULL参数吗? – openshac 2011-03-24 12:33:14