简体   繁体   English

用于存储过程的SqlDataSource的QueryStringParameter

[英]QueryStringParameter for SqlDataSource for Stored Procedure

I have a SqlDataSource and want to filter it based on query string. 我有一个SqlDataSource ,想基于查询字符串对其进行过滤。 However using SelectParameters / QueryStringParameter , it doesn't seem to pass the value to the stored procedure. 但是,使用SelectParameters / QueryStringParameter ,似乎没有将值传递给存储过程。

The data source is configured like this: 数据源的配置如下:

<asp:SqlDataSource runat="server" ID="sqlGetDetails"
     ConnectionString='<%$ ConnectionStrings:SqlDbConnectionString.ConnectionString %>'
     SelectCommand= "GetDetails" SelectCommandType="StoredProcedure">
     <asp:SelectParameters>
         <asp:QueryStringParameter Name="AppID" QueryStringField="AppID" DbType="String" Direction="Input" DefaultValue="" ConvertEmptyStringToNull="true"/>
     </asp:SelectParameters>
</asp:SqlDataSource>

It fails with error: 它因错误而失败:

Procedure or function 'GetDetails' expects parameter '@AppID', which was not supplied 过程或函数“ GetDetails”期望参数“ @AppID”(未提供)

The stored procedure was created with code like this: 存储过程是使用以下代码创建的:

CREATE PROCEDURE [dbo].[GetDetails]
    @AppID NCHAR(40)
AS
BEGIN
    SELECT * 
    FROM dbo.Details 
    WHERE dbo.Details.AppID = @AppID
END
GO

Stack trace: 堆栈跟踪:

[SqlException (0x80131904): Procedure or function 'GetDetails' expects >parameter '@AppID', which was not supplied.] >System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) +2444190 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) +5775712 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +285 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4169 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +58 System.Data.SqlClient.SqlDataReader.get_MetaData() +89 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal [SqlException(0x80131904):过程或函数'GetDetails'期望>参数'@AppID',未提供。]> System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔值BreakConnection,操作1 wrapCloseInAction) +2444190 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction)+5775712 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔值callerHasConnectionLock,布尔值asyncClose)+285 System.Data.SqlClient.TdsParser。 TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean和dataReady)+4169 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()+58 System.Data.SqlClient.SqlDataReader。 Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串resetOptionsString,布尔值isInternal , Boolean forDescribeParameterEncryption) +409 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +2127 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) +911 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +64 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +240 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) ,布尔值forDescribeParameterEncryption)+409 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔值returnStream,布尔值异步,Int32超时,任务和任务,布尔值asyncWrite,布尔值inRetry,SqlDataReader 127,系统Boolean描述参数) Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔值returnStream,字符串方法,TaskCompletionSource`1完成,Int32超时,任务和任务,布尔值和usedCache,布尔值asyncWrite,布尔值inRetry)+911 System.Data.SqlClient.SqlCommand。 RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔returnStream,String方法)+64 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior行为,String方法)+240 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior行为)+41系统.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior行为) +12 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +139 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +136 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +86 System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1474 System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +22 System.Web.UI.WebControls.DataBoundControl.PerformSelect() +143 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74 System.Web.UI.WebControls.GridView.DataBind() +9 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +114 System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +75 System.Web.UI.Control.Ensur +12 System.Data.Common.DbDataAdapter.FillInternal(DataSet数据集,DataTable []数据表,Int32 startRecord,Int32 maxRecords,字符串srcTable,IDbCommand命令,CommandBehavior行为)+139 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord,Int32 maxRecords,字符串srcTable,IDbCommand命令,CommandBehavior行为)+136 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,String srcTable)+86 System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments参数) +1474 System.Web.UI.DataSourceView.Select(DataSourceSelectArguments参数,DataSourceViewSelectCallback回调)+22 System.Web.UI.WebControls.DataBoundControl.PerformSelect()+143 System.Web.UI.WebControls.BaseDataBoundControl.DataBind()+74 System.Web.UI.WebControls.GridView.DataBind()+9 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()+114 System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls()+75 System.Web.UI .Control.Ensur eChildControls() +92 System.Web.UI.Control.PreRenderRecursiveInternal() +42 System.Web.UI.Control.PreRenderRecursiveInternal() +160 System.Web.UI.Control.PreRenderRecursiveInternal() +160 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +883 eChildControls()+92 System.Web.UI.Control.PreRenderRecursiveInternal()+42 System.Web.UI.Control.PreRenderRecursiveInternal()+160 System.Web.UI.Control.PreRenderRecursiveInternal()+160 System.Web.UI。 Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+883

Your SelectCommand must look like: 您的SelectCommand必须看起来像:

From:

SelectCommand= "GetDetails"

To:

SelectCommand= "GetDetails 12"

12 serve as a parameter. 12作为参数。

I never tried if you can pass something like 我从来没有尝试过你是否可以通过

SelectCommand= "GetDetails AppID//Serve as the value".. Just think about it.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM