【发布时间】:2015-03-19 15:19:14
【问题描述】:
通过这个存储过程,我试图插入绑定到网格视图的动态创建的数据表。当我在数据表中有一行要插入时,没关系,该行已插入,但是当我在数据表中有更多行要插入时,它会给我一个错误:
过程或函数 insertMarkica 指定的参数过多。
还有我在存储过程中声明的参数@MarkicaID,当添加新行时,它会增加一个。我认为这是问题所在,当添加一行时,参数@Mar 会增加,但其余的可能不是。请帮我解决这个问题。
ALTER PROCEDURE [dbo].[insertMarkica]
@FirmaID tinyint,
@Godina smallint,
@MarkicaID int,
@Datum datetime,
@Masa smallint,
@Kasa tinyint
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Mar int
Select @Mar = ISNULL(MAX(MarkicaID)+1,1)
FROM Markici
WHERE FirmaID = @FirmaID And Godina = @Godina and kasaid=@Kasa
INSERT INTO Markici ( FirmaID, Godina, KasaID, Masa, MarkicaID,Datum)
VALUES (@FirmaID, @Godina,@Kasa, @Masa, @Mar,@Datum)
Select Markica = @Mar
END
这里是数据表的参数代码
dtCurrentTable = (DataTable)ViewState["Markici"];
SqlCommand cmd = new SqlCommand("InsertMarkica",conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "InsertMarkica";
foreach (DataRow dr in dtCurrentTable.Rows)
{
//SqlCommand cmd = new SqlCommand(cmdstr, conn);
cmd.Parameters.AddWithValue("@FirmaID", dr["FirmaID"]);
cmd.Parameters.AddWithValue("@Godina", dr["Godina"]);
cmd.Parameters.AddWithValue("@Kasa", dr["KasaID"]);
cmd.Parameters.AddWithValue("@Masa", dr["Masa"]);
cmd.Parameters.AddWithValue("@MarkicaID", dr["MarkicaID"]);
cmd.Parameters.AddWithValue("@Datum", dr["Datum"]);
cmd.Parameters.AddWithValue("@VrabotenID", dr["VrabotenID"]);
cmd.Parameters.AddWithValue("@Smena", dr["Smena"]);
cmd.ExecuteNonQuery();
cmd.Connection = conn;
}
//创建dataColumns的方法表单:
private void AddDefaultFirstRecord()
{
//creating DataTable
DataTable dt = new DataTable();
DataRow dr;
dt.TableName = "Markici";
//creating columns for DataTable
dt.Columns.Add(new DataColumn("FirmaID", typeof(System.Int32)));
dt.Columns.Add(new DataColumn("Godina", typeof(System.Int32)));
dt.Columns.Add(new DataColumn("KasaID", typeof(System.Int32)));
dt.Columns.Add(new DataColumn("MarkicaID", typeof(System.Int64)));
dt.Columns.Add(new DataColumn("Datum", typeof(System.DateTime)));
dt.Columns.Add(new DataColumn("Masa", typeof(System.Int32)));
dt.Columns.Add(new DataColumn("VrabotenID", typeof(System.Int32)));
dt.Columns.Add(new DataColumn("Artikal", typeof(System.String)));
dt.Columns.Add(new DataColumn("Cena1", typeof(System.String)));
dt.Columns.Add(new DataColumn("Kolicina", typeof(System.Decimal)));
dt.Columns.Add(new DataColumn("Smena", typeof(System.Int32)));
dt.Columns.Add(new DataColumn("VkIznos", typeof(System.Decimal)));
dt.Columns.Add(new DataColumn("VkDanok", typeof(System.Decimal)));
dt.Columns.Add(new DataColumn("SysDatum", typeof(System.DateTime)));
dt.Columns.Add(new DataColumn("Vid", typeof(System.String)));
dt.Columns.Add(new DataColumn("EdMera", typeof(System.String)));
dt.Columns.Add(new DataColumn("ArtikalID", typeof(System.String)));
dr = dt.NewRow();
dt.Rows.Add(dr);
ViewState["Markici"] = dt;
GridView2.DataSource = dt;
GridView2.DataBind();
}
【问题讨论】:
-
存储过程访问的参数少于您在代码中传递的参数。
-
已删除,但它给了我同样的错误。仅在添加一行时工作
-
添加参数前需要调用cmd.Parameters.Clear();循环内
-
非常感谢。这对我有帮助,现在我可以插入多行了!。
标签: mysql asp.net stored-procedures