我有一个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,Action
1 wrapCloseInAction) +2444190 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 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
您的SelectCommand必须如下所示:
From:
SelectCommand= "GetDetails"
To:
SelectCommand= "GetDetails 12"
12
作为参数。
如果你能传递类似的东西,我从未尝试过
SelectCommand= "GetDetails AppID//Serve as the value".. Just think about it.