尝试使用 asp.net 创建 SQL 参数集合时出现异常错误



当我尝试实现SQL参数集合时,我遇到了这个异常问题。 例外说:

System.Data 中发生了类型为"System.InvalidCastException"的异常.dll但未在用户代码中处理 其他 信息:SqlParameterCollection 仅接受非 null SqlParameter 类型对象,而不是 SqlParameter[] 对象。

这也是源错误:

"/"应用程序中的服务器错误。

SqlParameterCollection 仅接受非空 SqlParameter 类型 对象,而不是 SqlParameter[] 对象。

说明:执行 当前 Web 请求。请查看堆栈跟踪以获取更多信息 有关错误及其在代码中起源位置的信息。

异常详细信息:System.InvalidCastException: SqlParameterCollection 仅接受非空 SqlParameter 类型 对象,而不是 SqlParameter[] 对象。

源错误:

第 197 行:if (p!= null) 第 198 行:if (p.Any()) 第 199 行:命令。Parameters.Add(p); 第 200 行:} 201路:

源文件: c:\Users\User1\Documents\Visual Studio
2015\网站\MusicStore\Pages\OverviewGuitarData.aspx.cs 行: 199

堆栈跟踪:

[InvalidCastException:SqlParameterCollection 只接受 非空 SqlParameter 类型对象,而不是 SqlParameter[] 对象。 System.Data.SqlClient.SqlParameterCollection.ValidateType(Object 值) +5734517 System.Data.SqlClient.SqlParameterCollection.Add(Object value) +23 Pages_OverviewData.GetExample(SqlCommand command, SqlParameter[] p) in c:\Users\User1\Documents\Visual Studio 2015\网站\音乐商店\页面\概述吉他数据.aspx.cs:199 Pages_OverviewData.吉他品牌网格视图_行更新(对象发送者, GridViewUpdateEventArgs e) in c:\Users\User1\Documents\Visual Studio 2015\网站\音乐商店\页面\概述吉他数据.aspx.cs:157 System.Web.UI.WebControls.GridView.OnRowUpdating(GridViewUpdateEventArgs e) +122 System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation) +792 System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean 原因验证,字符串验证组) +877 System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +89 System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37 System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object 来源, 事件参数 e) +90 System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37 System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +114 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +260 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler. RaisePostBackEvent(String eventArgument) +12 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639

这是我的代码的一部分,sqlparameter 起源:

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["brandsConnection"].ToString())) {
string query = "UPDATE [guitarBrands] SET type = @type, name = @name, image = @image WHERE id = @id";
SqlParameter[] p = new SqlParameter[4];
p[0] = new SqlParameter("type", newType.Text);
p[1] = new SqlParameter("name", newName.Text);
p[2] = new SqlParameter("image", newImage.Text);
p[3] = new SqlParameter("id", id);
connection.Open();
using (SqlCommand command = new SqlCommand(query, connection))
{
GetExample(command, p);
command.ExecuteNonQuery();
connection.Close();
command.Parameters.Clear();
}
}
public void GetExample(SqlCommand command, params SqlParameter[] p)
{
if (p != null)
if (p.Any())
command.Parameters.Add(p);//error is pointing here
}

我想你的意思是AddRange:

if (p != null && p.Any())
command.Parameters.AddRange(p);

此外,正如评论者指出的那样,请确保您的参数名称与您的查询相对应:

p[0] = new SqlParameter("@type", newType.Text);

问题出在添加中。必须改用"添加范围"。

command.Parameters.AddRange(p);

最新更新