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();在添加参数之前,现在它工作了。
谁能给我解释一下我怎么才能纠正这个问题?非常感谢您的帮助
找出错误。我添加了cmd.Parameters.Clear();在Update方法中添加参数之前,现在它可以工作了