2013-07-16 81 views
2

我試圖從ASP.NET中的SQL Server訪問一些數據,但我無法獲取傳遞給SQL Server存儲過程的參數。該參數位於URL中(即www.company.com/ImportantManager.aspx?id=Jones,%Bob),因爲我只希望顯示Bob Jones的結果。存儲過程中的ASP.NET/SQL參數問題

NiceMgr_Total是存儲過程。我在這裏和微軟的論壇上看到了許多不同的對類似問題的迴應,但我認爲存儲過程可能會搞亂它(@manager參數 - 其他參數似乎工作正常)。

我已經嘗試了多種方式,我得到了各種解析器錯誤和「參數未找到」錯誤。謝謝你的幫助。

下面的代碼:

<asp:GridView ID="GridView1" DataSourceID="SqlDataSource7" runat="server" 
     AutoGenerateRows="False" EmptyDataText="There are no data records to display." 
     AutoGenerateColumns="False"> 
    <Columns> 
     <asp:BoundField DataField="Manager" HeaderText="Manager" SortExpression="Manager" 
      ItemStyle-Width="41px" ItemStyle-HorizontalAlign="Center" 
      HeaderStyle-CssClass="tableheader3" ItemStyle-CssClass="tabledata2" /> 
    </Columns> 
</asp:GridView> 

<asp:SqlDataSource ID="SqlDataSource7" runat="server" 
    ConnectionString="<%$ConnectionStrings:ConnectionString3 %>" 
    ProviderName="<%$ ConnectionStrings:ConnectionString3.ProviderName %>" 
    SelectCommand="DECLARE @PerDate VARCHAR(50) 
    DECLARE @CurrentDate DATETIME 
    SET @CurrentDate = (SELECT MAX([MostRecent]) FROM sameDB.dbo.RecentDate) 
    SET @PerDate = CAST(CONVERT(VARCHAR(10),@CurrentDate,120) AS VARCHAR(50)) 
    EXEC [NiceMgr_Total] @[email protected], @[email protected], @[email protected]"> 

    <selectparameters> 
     <asp:querystringparameter name="MgrName" DBtype="String" 
      QueryStringField="<%Response.Write(Request.QueryString.Item("id"))%>" /> 
    </selectparameters> 
</asp:SqlDataSource> 

回答

1

你必須與你的做法相當多的問題 - 請嘗試以下步驟:

  1. 你需要指定只是存儲過程的名稱與SelectCommand
  2. 你需要把所有參數代入<SelectParameters>集合
  3. 請:如果您有日期 - 然後使用DATEDATETIME數據類型,不要不斷地來回轉換字符串和來回字符串!
  4. 你需要告訴你的SELECT命令,它是一個存儲過程(而不是直接插入SQL文本)
  5. <QueryStringParameter> - 你只需要指定名稱的查詢字符串元素的 - 的SqlDataSource會去閱讀值本身

你需要嘗試是這樣的:現在

<asp:SqlDataSource ID="SqlDataSource7" runat="server" 
     ConnectionString="<%$ConnectionStrings:ConnectionString3 %>" 
     ProviderName="<%$ ConnectionStrings:ConnectionString3.ProviderName %>" 
     SelectCommand="dbo.NiceMgr_Total" <!-- *JUST* the name! --> 
     SelectCommandType="StoredProcedure"> <!-- tell it's a stored procedure! --> 
    <SelectParameters> 
     <asp:QueryStringParameter name="MgrName" DbType="String" QueryStringField="id" /> 
     <!-- specify *ALL* parameters here! --> 
     <asp:Parameter Name="date1" DbType="DATETIME" /> 
     <asp:Parameter Name="date2" DbType="DATETIME" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

,當然,你需要尋找一些方法來指定date1date2參數在SqlDataSourceSelectCommand之前得到執行....

-1

嘗試:

QueryStringField="<%Response.Write(HttpUtility.HtmlDecode(Request.QueryString.Item("id")))%>" /> 

你可能需要它可以參數化之前的查詢字符串解碼。

+0

QueryStringField只能包含查詢字符串中的**字段名**而不是查詢字符串中指定的值! –