.NET Web窗体将参数传递为SQL Select / Where

时间:2015-09-11 15:55:45

标签: c# asp.net sql-server

我正在处理连接到SQL服务器的Web窗体应用程序,我正在尝试将数据从一个页面传递到另一个页面。具体来说,我有一个ListView ProjectList.aspx,它将 ProjectID 值传递给FormView ProjectDetails.aspx。我正在尝试设置SQL以捕获此ProjectID作为其WHERE子句的参数。

我的ProjectDetails.aspx数据源定义如下。

<asp:SqlDataSource ID="ProjectDetailsSQL" 
                   runat="server" 
                  ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 

DeleteCommand="DELETE FROM [tblProject] WHERE [ProjectID] = @original_ProjectID" 

InsertCommand="INSERT INTO [tblProject] 
                          ([ProjectID], [ProjectName], [ProjectAddress], 
                           [ProjectCity], [ProjectState],[ProjectZip]) 
                    VALUES (@ProjectID, @ProjectName, @ProjectAddress, 
                            @ProjectCity, @ProjectState, @ProjectZip)" 

OldValuesParameterFormatString="original_{0}" 

SelectCommand="SELECT [ProjectID], [ProjectName], [ProjectAddress], 
                      [ProjectCity], [ProjectState], [ProjectZip]
               FROM [tblProject] WHERE ([ProjectID] = @ProjectID)" 

UpdateCommand="UPDATE [tblProject] 
               SET [ProjectName] = @ProjectName, 
                   [ProjectAddress] = @ProjectAddress, 
                   [ProjectCity] = @ProjectCity, 
                   [ProjectState] = @ProjectState, 
                   [ProjectZip] = @ProjectZip 
               WHERE [ProjectID] = @original_ProjectID">

<DeleteParameters>
    <asp:Parameter Name="original_ProjectID" Type="Int32" />
</DeleteParameters>

<InsertParameters>
    <asp:Parameter Name="ProjectID" Type="Int32" />
    <asp:Parameter Name="ProjectName" Type="String" />
    <asp:Parameter Name="ProjectAddress" Type="String" />
    <asp:Parameter Name="ProjectCity" Type="String" />
    <asp:Parameter Name="ProjectState" Type="String" />
    <asp:Parameter Name="ProjectZip" Type="String" />
</InsertParameters>

<SelectParameters>
    <asp:Parameter Name="ProjectID" Type="Int32" />
</SelectParameters>

<UpdateParameters>
    <asp:Parameter Name="ProjectName" Type="String" />
    <asp:Parameter Name="ProjectAddress" Type="String" />
    <asp:Parameter Name="ProjectCity" Type="String" />
    <asp:Parameter Name="ProjectState" Type="String" />
    <asp:Parameter Name="ProjectZip" Type="String" />
    <asp:Parameter Name="original_ProjectID" Type="Int32" />
</UpdateParameters>

我尝试将数据作为路由URL(Servername / Project / 12345),显式URL(Servername / ProjectDetails.aspx?12345)传递并定义参数(Servername / ProjectDetails.aspx?ProjectID = 12345)并且FormView来了空白。如果我从SelectCommand中删除WHERE ([ProjectID] = @ProjectID),则FormView会显示该表的第一条记录正常。

我猜测问题不在于传递数据,而是在WHERE子句中捕获我想要传递的内容。是否有其他地方我需要将@ProjectID定义为我想要传递的值?

1 个答案:

答案 0 :(得分:0)

这里的问题是SqlDataSource没有参数的值,它根本不知道从哪里拿来。

我不确定SqlDataSource是否可以正常使用url重写,猜测它取决于你实际设置它的方式。但对于后一种选择,你提到了

  

服务器名/ ProjectDetails.aspx?专案编号= 12345

内置支持。将参数声明为查询字符串1,它将直接从请求的查询字符串中获取:

<SelectParameters>
    <asp:QueryStringParameter Name="ProjectID" Type="Int32" QueryStringField="ProjectID" />
</SelectParameters>