发现问题
今天敲击牛腩,在敲击Web页面的List.aspx之后,点击Ctrl+F5运行,发现运行不了,首先是数据库中调取数据有问题,因为这个数据是用存储过程调取的,所以需要修改存储过程,这时候只需要改成如下代码就行:
将这个更改完之后就可以在数据库中调取到应需要的数据了,但是这只是一个开始,在修改完这个之后,我继续运行List.aspx,然后给我报出了“过程或函数 ‘news_selectByCaId’ 需要参数 ‘@caid’,但未提供该参数。”这个错误;如下
分析问题
网上有很多答案,有的说是不是没有用到cmd,但是从代码中就可已看出cmd是有用到的。所以这方面的解决方案直接给排除。那么究竟是什么情况呢?
解决问题
在数据库中,我们新建查询的时候使用如下代码:
exec news_selectByCaId 29
就能得出如下内容:
可以从图中看出,caId有被调取出来的,这说明数据库中存储过程中的代码是没有错误的,但是细心的一定会发现,上面调取数据的时候后面有输入一个数值 ‘29’ ,所以我们可以直接在数据库中找寻到caId为‘29’下的所有数据,所以,问题就出现在这里。
最后总结
在直接启动List.aspx窗体时没有传入参数@caid,所以就报错,这个时候你只需要打开首页Default.aspx,然后从首页进入到List.aspx页面就能顺利打开List.aspx。只有在没有传入参数的情况下才会报出错误。
过程或函数 ‘news_selectByCaId’ 需要参数 ‘@caid’,但未提供该参数。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 过程或函数 ‘news_selectByCaId’ 需要参数 ‘@caid’,但未提供该参数。
源错误:
行 134: cmd.CommandType = ct;
行 135: cmd.Parameters.AddRange(paras);
行 136: using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) //Using的用法是在执行该命令的时候,如果关闭关联的DataReader对象,则关联的Connection对象也将关闭
行 137: {
行 138: dt.Load(sdr);
源文件: c:\Users\ITLuoxiaojun\Desktop\牛腩新闻发布\牛腩新闻发布\DAL\SQLHelper.cs 行: 136
堆栈跟踪:
[SqlException (0x80131904): 过程或函数 ‘news_selectByCaId’ 需要参数 ‘@caid’,但未提供该参数。]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) +266
1 wrapCloseInAction) +98
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +986
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +6512
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +210
System.Data.SqlClient.SqlDataReader.get_MetaData() +177
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption) +513
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) +4306
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) +1179
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +136
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +361
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) +116
DAL.SQLHelper.ExecuteQuery(String cmdText, SqlParameter[] paras, CommandType ct) in c:\Users\ITLuoxiaojun\Desktop\牛腩新闻发布\牛腩新闻发布\DAL\SQLHelper.cs:136
DAL.NewsDAO.SelectByCaId(String caid) in c:\Users\ITLuoxiaojun\Desktop\牛腩新闻发布\牛腩新闻发布\DAL\NewsDAO.cs:66
BLL.NewsManager.SelectByCaId(String caid) in c:\Users\ITLuoxiaojun\Desktop\牛腩新闻发布\牛腩新闻发布\BLL\NewsManager.cs:55
Web.List.Page_Load(Object sender, EventArgs e) in c:\Users\ITLuoxiaojun\Desktop\牛腩新闻发布\牛腩新闻发布\Web\List.aspx.cs:19
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +188
System.Web.UI.Control.OnLoad(EventArgs e) +165
System.Web.UI.Control.LoadRecursive() +170
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3608
版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.7.2623.0