存储过程的SqlDataSource的QueryStringParameter

问题描述 投票:0回答:1

我有一个SqlDataSource,并希望根据查询字符串过滤它。但是,使用SelectParameters / QueryStringParameter,它似乎没有将值传递给存储过程。

数据源配置如下:

<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>

它失败并出现错误:

过程或函数'GetDetails'需要参数'@AppID',这是未提供的

使用如下代码创建存储过程:

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

堆栈跟踪:

[SqlException(0x80131904):过程或函数'GetDetails'期望>参数'@AppID',未提供。]> System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action1 wrapCloseInAction) +2444190 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)+5775712系统。 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,Boolean forDescribeParameterEncryption) +409 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,R unBehavior 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完成,Int32超时,任务和任务,布尔和usedCache,布尔asyncWrite,布尔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)+ 12 System.Data.Common.DbDataAdapter.FillInternal(DataSet数据集,DataTable []数据表,Int32 startRecord,Int32 maxRecords,S tring srcTable,IDbCommand命令,CommandBehavior行为)+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.EnsureChildControls()+92 System.Web.UI.Control.PreRenderRecursiveInternal()+42 System.Web.UI .Control.PreRenderRecursiveInternal()+ 16 0 System.Web.UI.Control.PreRenderRecursiveInternal()+160 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+883

c# asp.net sqldatasource
1个回答
0
投票

您的SelectCommand必须如下所示:

From:

SelectCommand= "GetDetails"

To:

SelectCommand= "GetDetails 12"

12作为参数。

如果你能传递类似的东西,我从未尝试过

SelectCommand= "GetDetails AppID//Serve as the value".. Just think about it.
© www.soinside.com 2019 - 2024. All rights reserved.