c#:过程或函数指定了太多参数——因为数据集在干扰

本文关键字:参数 因为 数据集 干扰 太多 过程 函数 | 更新日期: 2023-09-27 18:08:37

当我尝试从c#代码执行更新时,我在主题中得到错误。

我用硬编码的值测试了代码,它可以工作。

这些是硬编码的值,从按钮点击传递给更新方法,这样做,工作:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    spe.ActionTypeID = 1;
    spe.ResultTypeID = -1;
    spe.ResultMessage = "";
    spe.StorePageID = Convert.ToInt32(Session["StorePageID"]);
    spe.SPPreambleID = 16;            
    spe.Title = txtTitle.Text;
    spe.SEOTitle = txtSEOTitle.Text;
    spe.ParentStorePageID = -1;
    spe.Meta = txtMeta.Text;
    spe.Image = null;
    spe.ImageLink = null;
    spe.Blurb = null;
    spe.RegionID = 1;
    spe.Footer = txtFooter.Text;
    count = spd.StorePage_Update(spe);
    if (count > 0)
    {
        Session["StorePageID"] = null;
        Response.Redirect("~/StorePageList.aspx");
    }
}   
public int StorePage_Update(StorePageEntity sp)
{
    try
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "cud_UpdatePage";
        cmd.Connection = con;
        if (con.State != ConnectionState.Open)
        {
            con.Open();
        }
        cmd.Parameters.AddWithValue("@ActionTypeID", SqlDbType.Int).Value = sp.ActionTypeID;
        cmd.Parameters.AddWithValue("@ResultTypeID", SqlDbType.Int).Value = sp.ResultTypeID;
        cmd.Parameters.AddWithValue("@ResultMessage", SqlDbType.VarChar).Value = sp.ResultMessage;
        cmd.Parameters.AddWithValue("@StorePageID", SqlDbType.Int).Value = sp.StorePageID;
        cmd.Parameters.AddWithValue("@SPPreambleID", SqlDbType.Int).Value = sp.SPPreambleID;
        cmd.Parameters.AddWithValue("@Title", SqlDbType.NVarChar).Value = sp.Title;
        cmd.Parameters.AddWithValue("@SEOTitle", SqlDbType.NVarChar).Value = sp.SEOTitle;
        cmd.Parameters.AddWithValue("@ParentStorePageID", SqlDbType.Int).Value = sp.ParentStorePageID;
        cmd.Parameters.AddWithValue("@Meta", SqlDbType.Text).Value = sp.Meta;
        cmd.Parameters.AddWithValue("@Image", SqlDbType.VarChar).Value = sp.Image;
        cmd.Parameters.AddWithValue("@ImageLink", SqlDbType.VarChar).Value = sp.ImageLink;
        cmd.Parameters.AddWithValue("@Blurb", SqlDbType.Text).Value = sp.Blurb;
        cmd.Parameters.AddWithValue("@RegionID", SqlDbType.Int).Value = sp.RegionID;
        cmd.Parameters.AddWithValue("@Footer", SqlDbType.Text).Value = sp.Footer;
        count = cmd.ExecuteNonQuery();                
    }            
    catch (Exception e)
    {
        Console.Write("StorePage_Update: problem with command:" + cmd + "e=" + e);
        Console.Out.Flush();
        throw new Exception("StorePage_Update: problem with command:" + cmd, e);
    }
    finally
    {
        if (con != null) { con.Close(); }
    }
    return count;
}   

但是当我从硬编码值更改为web表单和数据库中的值时,我会得到"过程或函数有太多参数"错误。

这是代码看起来与db,和web表单值:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    spe.ActionTypeID = 1;
    spe.ResultTypeID = -1;
    spe.ResultMessage = "";
    spe.StorePageID = Convert.ToInt32(Session["StorePageID"]);
    ds = spd.StorePage_Select_One(spe.StorePageID);     
    spe.SPPreambleID = (ds.Tables[0].Rows[0].IsNull("SPPreambleID")) ? -1 : Convert.ToInt32(ds.Tables[0].Rows[0]["SPPreambleID"]);          
    spe.Title = txtTitle.Text;
    spe.SEOTitle = txtSEOTitle.Text;        
    spe.ParentStorePageID = (ds.Tables[0].Rows[0].IsNull("ParentStorePageID")) ? -1 : Convert.ToInt32(ds.Tables[0].Rows[0]["ParentStorePageID"]);       
    spe.Meta = txtMeta.Text;
    spe.Image = (ds.Tables[0].Rows[0].IsNull("Image")) ? null : ds.Tables[0].Rows[0]["Image"].ToString();
    spe.ImageLink = (ds.Tables[0].Rows[0].IsNull("ImageLink")) ? null : ds.Tables[0].Rows[0]["ImageLink"].ToString();
    spe.Blurb = (ds.Tables[0].Rows[0].IsNull("Blurb")) ? null : ds.Tables[0].Rows[0]["Blurb"].ToString();
    spe.RegionID = Convert.ToInt32(ds.Tables[0].Rows[0]["RegionID"]);
    spe.Footer = txtFooter.Text;
    count = spd.StorePage_Update(spe);
    if (count > 0)
    {
        Session["StorePageID"] = null;
        Response.Redirect("~/StorePageList.aspx");
    }
    else
    {
        Session["StorePageID"] = null;
        Response.Redirect("~/StorePageList.aspx");
    }
}

我试着注释掉每一个值和测试,但错误没有消失。

然后我用硬编码值进行测试,在代码中留下这一行:

ds = spd.StorePage_Select_One(spe.StorePageID);     

然后用硬编码的值给我同样的错误。

我认为这是导致错误的原因,但我需要有一种方法来获得值,这就是为什么我添加了数据集并调用方法:Page_Select_One

我运行SQL Profiler,我可以看到问题是什么,StorePageID参数传递了两次。

下面是profiler的结果:

exec cud_UpdatePage
@StorePageID=20,
@ActionTypeID=1,
@ResultTypeID=-1,
@ResultMessage=N'',
@StorePageID=0,
@SPPreambleID=17,
@Title=N'sax store',
@SEOTitle=N'sax seo',
@ParentStorePageID=-1,
@Meta=N'text',
@Image=default,
@ImageLink=default,
@Blurb=default,
@RegionID=1,
@Footer=N'text'

找出错误。我添加了cmd.Parameters.Clear();在添加参数之前,现在它工作了。

谁能给我解释一下我怎么才能纠正这个问题?

非常感谢您的帮助

c#:过程或函数指定了太多参数——因为数据集在干扰

找出错误。我添加了cmd.Parameters.Clear();在Update方法中添加参数之前,现在它可以工作了

相关文章: