【问题标题】:SQL Server stored procedure insert querySQL Server 存储过程插入查询
【发布时间】: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


【解决方案1】:

使用此代码:-

if (Base.Status() == true)
    Cmd.ExecuteNonQuery();
else
{
     Base.Open();
     Cmd.ExecuteNonQuery();
}

区别只是在else 子句中添加花括号{....}。没有大括号 {} 的代码正在执行两次 Cmd.ExecuteNonQuery() 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多