至少一个参数没有被指定值(执行 SQL 语句错误)
在 C# 中执行 SQL 语句,有时会报“至少一个参数没有被指定值”这样的错误。这个错误提示十分含糊,看不出来具体指那里,如果从未遇到这样的错误,排查起来有点困难。
“至少一个参数没有被指定值”这类错误通常出现在查询语句(即 Select 语句)中,不会出现在插入或更新语句中。下面先看具体错误,再看解决办法。
一、“至少一个参数没有被指定值”的错误
假如执行以下 SQL 语句:
string strSQL = "Select Title,model,detail,adddate From products Order By adddate Desc";
异常详细信息: System.Exception: 至少一个参数没有被指定值。
源错误:
行 203: catch (Exception e)
行 204: {
行 205: throw new Exception(e.Message);
行 206: }
行 207: finally
源文件: D:\Webdata\classes\SqlExe.cs 行: 205
堆栈跟踪:
[Exception: 至少一个参数没有被指定值。]
EpWeb.privates.classes.SqlData.dataTable(String sqlstr) in D:\Webdata\classes\SqlExe.cs:205
EpWeb.feedback.index.BindFeedback() in D:\Webdata\product\index.aspx.cs:24
EpWeb.feedback.index.Page_Load(Object sender, EventArgs e) in D:\Webdata\product\index.aspx.cs:16
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +91
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207
二、“至少一个参数没有被指定值”的解决办法
其实错误很简单,是一个字段弄错了,数据库中没有定义 detail 字段,而是定义了 content 字段,所以把 detail 改为 content,问题就解决了,修改后的 SQL 语句变为:
string strSQL = "Select Title,model,content,adddate From products Order By adddate Desc";
像执行 SQL 语句这类含糊其词的错误,可以用逐个排出法,首先检查 Select 这些关键字是否有误,再检查字段数据表中是否有,最后再检查排序字段是否选择出。