【发布时间】:2017-01-07 20:10:07
【问题描述】:
在我使用的 C# 代码中:
public void Add(int ID)
{
foreach (AccessoireToSell item in OrderToAdd.Accessoires)
{
Adder(item.Ref, item.Qte, item.SellPrice, ID);
}
}
private void Adder(int refid,int Qtetosell,string sellprice,int ID)
{
SqlParameter[] param = new SqlParameter[4];
param[0] = new SqlParameter("@AccessoireID", SqlDbType.Int);
param[0].Value = refid;
param[1] = new SqlParameter("@Qte", SqlDbType.Int);
param[1].Value = Qtetosell;
param[2] = new SqlParameter("@Price", SqlDbType.VarChar, 50);
param[2].Value = sellprice;
param[3] = new SqlParameter("@ORDERID", SqlDbType.Int);
param[3].Value = ID;
Function.Execute(param, "AccessoiresAddOrder");
}
程序AccessoiresAddOrder:
ALTER PROCEDURE [dbo].[AccessoiresAddOrder]
@ORDERID int,
@AccessoireID int,
@Qte int,
@Price Varchar(50)
AS
INSERT INTO [dbo].[Accessoires_OrderDetails] ([orderID], [AccessoireID],[Qte], [Price])
VALUES (@ORDERID, @AccessoireID, @Qte, @Price)
我不明白为什么记录会连续插入 2 次。例如,我从 Datagridview 中插入一行,然后在我的 SQL Server 表中两次获得同一行。
请注意,我在执行过程中检查了AccessoireToSell 列表计数,并在我的表中显示“Count = 2”,我找到了 4 条记录。
执行方法:
public void Execute(SqlParameter[] param, string ProcName)
{
SqlCommand Cmd = new SqlCommand();
Cmd.CommandText = ProcName;
Cmd.CommandType = CommandType.StoredProcedure;
if (param != null)
{
Cmd.Parameters.AddRange(param);
}
Cmd.Connection = Base.Connection;
if (Base.Status() == true)
Cmd.ExecuteNonQuery();
else
Base.Open();
Cmd.ExecuteNonQuery();
}
【问题讨论】:
-
Function.Execute中的代码是什么样的? -
该功能运行良好,我尝试用它执行其他插入过程,一切正常
-
如果
Base.Status()为真,它将ExecuteNonQuery两次。即使在单行if语句中也使用大括号的另一种情况。 -
此外,这种方法看起来很漏。您没有处置您的命令,并且似乎没有关闭并处置
Base中的连接。
标签: c# sql-server