尝试使用asp.net

时间:2017-05-24 10:31:33

标签: c# sql asp.net

当我尝试实现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
}

2 个答案:

答案 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);