当我尝试实现sqlparameter集合时,我遇到了这个异常问题。例外情况说:
System.Data.dll中出现“System.InvalidCastException”类型的异常,但未在用户代码中处理 信息:SqlParameterCollection只接受非null SqlParameter类型对象,而不是SqlParameter []对象。
这也是源错误:
>应用程序中的服务器错误。SqlParameterCollection只接受非null的SqlParameter类型 对象,而不是SqlParameter []对象。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.InvalidCastException:The SqlParameterCollection只接受非null的SqlParameter类型 对象,而不是SqlParameter []对象。
来源错误:
第197行:if(p!= null)第198行:if(p.Any()) 第199行:command.Parameters.Add(p); 200行:} 201行:
源文件:c:\ Users \ User1 \ Documents \ Visual Studio
2015 \ WebSites \ MusicStore \ Pages \ OverviewGuitarData.aspx.cs行:199堆栈追踪:
[InvalidCastException:SqlParameterCollection只接受 非null的SqlParameter类型对象,而不是SqlParameter []对象。 System.Data.SqlClient.SqlParameterCollection.ValidateType(对象 值) +5734517 System.Data.SqlClient.SqlParameterCollection.Add(Object value)+23 Pages_OverviewData.GetExample(SqlCommand命令, SqlParameter [] p)在c:\ Users \ User1 \ Documents \ Visual Studio中 2015年\网站已\ MusicStore \网页\ OverviewGuitarData.aspx.cs:199 Pages_OverviewData.GuitarBrandsGridView_RowUpdating(对象发送者, GridViewUpdateEventArgs e)在c:\ Users \ User1 \ Documents \ Visual Studio中 2015年\网站已\ MusicStore \网页\ OverviewGuitarData.aspx.cs:157 System.Web.UI.WebControls.GridView.OnRowUpdating(GridViewUpdateEventArgs E) +122 System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row,Int32 rowIndex,Boolean causeValidation)+792 System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e,Boolean causeValidation,String validationGroup)+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 来源,EventArgs 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
}
答案 0 :(得分:0)
问题在于添加。您必须改为使用AddRange。
command.Parameters.AddRange(p);
答案 1 :(得分:0)
我猜你真的是指AddRange:
if (p != null && p.Any())
command.Parameters.AddRange(p);
此外,正如评论者指出的那样,请确保您的参数名称与您的查询相对应:
p[0] = new SqlParameter("@type", newType.Text);