C# for循环只运行了两次
经过12个小时的搜索,我无法解决我的问题 在SQL中,我创建了两个过程,一个用于插入,第二个用于检查数据库,如果项目已经存在,它将在项目日志中更新并插入C# for循环只运行了两次,c#,sql-server,C#,Sql Server,经过12个小时的搜索,我无法解决我的问题 在SQL中,我创建了两个过程,一个用于插入,第二个用于检查数据库,如果项目已经存在,它将在项目日志中更新并插入 try { SqlConnection con = new SqlConnection(str); con.Open(); for (int i = 0; i < dgv.Rows.Count; i++) { SqlCommand cmd = new SqlCommand("Select
try
{
SqlConnection con = new SqlConnection(str);
con.Open();
for (int i = 0; i < dgv.Rows.Count; i++)
{
SqlCommand cmd = new SqlCommand("Select * From Purchase_Order WHERE Item_Name = '" + dgv.Rows[i].Cells["Column2"].Value + "' and Seller_Name = '" + dgv.Rows[i].Cells["Column3"].Value + "' and Company_Name = '" + dgv.Rows[i].Cells["Column4"].Value + "' ", con);
SqlDataAdapter ds = new SqlDataAdapter(cmd);
DataSet da = new DataSet();
ds.Fill(da);
int j = da.Tables[0].Rows.Count;
if (j > 0)
{
update(dgv, Date_of_Purchase, Discount, Paid_Amount, lbl_Remaining, lbl_Subtotal, lbl_Total);
}
else
{
SqlCommand sc = new SqlCommand("Purchase_Order_History", con);
sc.CommandType = CommandType.StoredProcedure;
sc.Parameters.AddWithValue("@Invoice_no", dgv.Rows[i].Cells["Column1"].Value);
sc.Parameters.AddWithValue("@Date_of_Purchase", Date_of_Purchase.Value.ToString("yyyy/MM/dd"));
sc.Parameters.AddWithValue("@Item_Name", dgv.Rows[i].Cells["Column2"].Value);
sc.Parameters.AddWithValue("@Seller_Name", dgv.Rows[i].Cells["Column3"].Value);
sc.Parameters.AddWithValue("@Company_Name", dgv.Rows[i].Cells["Column4"].Value);
sc.Parameters.AddWithValue("@Quantity", dgv.Rows[i].Cells["Column5"].Value);
sc.Parameters.AddWithValue("@Unit_Price", dgv.Rows[i].Cells["Column6"].Value);
sc.Parameters.AddWithValue("@Total_Price", dgv.Rows[i].Cells["Column7"].Value);
sc.Parameters.AddWithValue("@Discount", Discount.Text);
sc.Parameters.AddWithValue("@Paid_Amount", Paid_Amount.Text);
sc.Parameters.AddWithValue("@Remaining", lbl_Remaining.Text);
sc.Parameters.AddWithValue("@Sub_Total", lbl_Subtotal.Text);
sc.Parameters.AddWithValue("@Total", lbl_Total.Text);
sc.ExecuteNonQuery();
}
}
SuccessBox sb = new SuccessBox();
sb.ShowDialog();
con.Close();
}
catch (Exception)
{
throw;
}
第二程序:
ALTER PROCEDURE [dbo].[Update_Insert]
(
@Invoice_no int,
@Date_of_Purchase date,
@Item_Name nvarchar(100),
@Seller_Name nvarchar(100),
@Company_Name nvarchar(100),
@Quantity int,
@Unit_Price int,
@Total_Price int,
@Discount int,
@Paid_Amount int,
@Remaining int,
@Sub_Total int,
@Total int
)
AS
BEGIN
INSERT INTO Purchase_Order_Log(Invoice_no, Date_of_Purchase, Item_Name,
Seller_Name, Company_Name, Quantity, Unit_Price, Total_Price, Discount,
Paid_Amount, Remaining, Sub_Total, Total)
VALUES(@Invoice_no, @Date_of_Purchase,@Item_Name, @Seller_Name,
@Company_Name, @Quantity,@Unit_Price, @Total_Price, @Discount, @Paid_Amount,
@Remaining, @Sub_Total, @Total);
UPDATE Purchase_Order SET Quantity = Quantity + @Quantity, Unit_Price =
@Unit_Price, Total_Price = Total_Price + @Total_Price Where Item_Name =
@Item_Name AND Company_Name = @Company_Name AND Seller_Name = @Seller_Name
UPDATE Items SET Available_Stock = Available_Stock + @Quantity, Unit_Price =
@Unit_Price, Total_Price = Total_Price + @Total_Price Where Item_Name =
@Item_Name AND Company_Name = @Company_Name AND Seller_Name = @Seller_Name
END
从更新for循环中删除-1后,我将命令添加到for循环中,但它会将新项打印两次???而不是用户可以使用的两个存储过程
IF NOT EXISTS (SELECT 1 FROM table_Name WHERE condition)
BEGIN
INSERT INTO table_Name (id,name)
VALUES
(@id, @name)
END
ELSE
UPDATE table_Name SET id = @id, name = @name
WHERE condition
我之所以使用这个示例结构,是因为您的查询非常长。将示例查询转换为您的查询并尝试执行它将有助于您而不是您可以使用的两个存储过程
IF NOT EXISTS (SELECT 1 FROM table_Name WHERE condition)
BEGIN
INSERT INTO table_Name (id,name)
VALUES
(@id, @name)
END
ELSE
UPDATE table_Name SET id = @id, name = @name
WHERE condition
我之所以使用这个示例结构,是因为您的查询非常长。将示例查询转换为您的查询并尝试执行它将对您有所帮助首先,不要编写只会重新引发异常的catch块。第二,异常消息是什么?存储过程中有什么?Insert_Update参数太多。请清除参数,或者干脆不要重用命令-将命令的创建放在for循环中,就像在第一段代码中一样。事实上,您的try-catch在您显示的代码中是无用的……是
i++代码>在for循环的末尾?for循环已经在增加i
。首先,不要编写除了重新引发异常之外什么都不做的catch块。第二,异常消息是什么?存储过程中有什么?Insert_Update参数太多。请清除参数,或者干脆不要重用命令-将命令的创建放在for循环中,就像在第一段代码中一样。事实上,您的try-catch在您显示的代码中是无用的……是i++代码>在for循环的末尾?for循环已在增加i
。如果我的答案正确,请接受。因此,如果其他人有相同的问题,则他们可以直接使用它。如果我的答案是正确的,那么请接受。如果其他人有同样的问题,那么他们可以使用它。或者如果你错了,那么你可以发布答案是的,你的答案是正确的,兄弟。
IF NOT EXISTS (SELECT 1 FROM table_Name WHERE condition)
BEGIN
INSERT INTO table_Name (id,name)
VALUES
(@id, @name)
END
ELSE
UPDATE table_Name SET id = @id, name = @name
WHERE condition