'inserting/updating problem with foreach loop
Problem is that when I run this loop it insert only a few rows from dataset. But there's many rows in dataset. Also in database has no rows. Why not my loop is working? I also want if data already have in database that will be updated with current dataset data.
conn.Open();
foreach (DataRow row in dataset.Tables[0].Rows)
{
string cardno = row["cardno"].ToString();
string style = row["style"].ToString();
string process = row["process"].ToString();
int quantity = int.Parse(row["quantity"].ToString());
float price = float.Parse(row["price"].ToString());
float total_price = float.Parse(row["total_price"].ToString());
string month = dateTimePicker2.Value.ToString("MMMM");
int year = int.Parse(dateTimePicker2.Value.ToString("yyyy"));
string queryInsert = "EXEC SP_AmountProcess '" + cardno + "','" + style + "','" + process + "','" + price + "','" + quantity + "','" + total_price + "','" + month + "','" + year + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "';";
SqlCommand cmd2 = new SqlCommand(queryInsert, conn);
cmd2.ExecuteNonQuery();
}
dataGridView1.DataSource = null;
//dataset.Reset();
MessageBox.Show("Process Success");
conn.Close();
:::Store Procedure (SP_AmountProcess)::::
CREATE procedure [dbo].[SP_AmountProcess]
@cardno nvarchar(50),
@style nvarchar(255),
@process nvarchar(255),
@rate float,
@quantity int,
@amount float,
@month nvarchar(50),
@year int,
@process_time datetime
AS
IF NOT EXISTS (SELECT '#' FROM TBL_PROCESS_AMOUNT WHERE YEAR =@year AND MONTH=@month AND CARDNO= @cardno)
BEGIN
UPDATE [dbo].[TBL_PROCESS_AMOUNT] SET [CARDNO] =@cardno,[STYLE]=@style,[PROCESS]=@process,[QUANTITY]=@quantity,[RATE]=@rate,[AMOUNT]=@amount,[MONTH]=@month,[YEAR]=@year,[PROCESS_TIME]=@process_time WHERE YEAR =@year AND MONTH=@month AND CARDNO=@cardno ;
END
ELSE
BEGIN
INSERT INTO [dbo].[TBL_PROCESS_AMOUNT] ([CARDNO] ,[STYLE] ,[PROCESS] ,[QUANTITY] ,[RATE] ,[AMOUNT] ,[MONTH] ,[YEAR] ,[PROCESS_TIME]) VALUES (@cardno,@style,@process,@quantity,@rate,@amount,@month,@year,@process_time);
END ;
Solution 1:[1]
change this approach in sp please check i think this might be helpful to u..
:::Store Procedure (SP_AmountProcess)::::
CREATE procedure [dbo].[SP_AmountProcess]
@cardno nvarchar(50),
@style nvarchar(255),
@process nvarchar(255),
@rate float,
@quantity int,
@amount float,
@month nvarchar(50),
@year int,
@process_time datetime
AS
IF NOT EXISTS (SELECT '#' FROM TBL_PROCESS_AMOUNT WHERE YEAR =@year AND MONTH=@month AND CARDNO= @cardno)
BEGIN
INSERT INTO [dbo].[TBL_PROCESS_AMOUNT] ([CARDNO] ,[STYLE] ,[PROCESS] ,[QUANTITY] ,[RATE] ,[AMOUNT] ,[MONTH] ,[YEAR] ,[PROCESS_TIME]) VALUES (@cardno,@style,@process,@quantity,@rate,@amount,@month,@year,@process_time);
END
ELSE
BEGIN
UPDATE [dbo].[TBL_PROCESS_AMOUNT] SET [CARDNO] =@cardno,[STYLE]=@style,[PROCESS]=@process,[QUANTITY]=@quantity,[RATE]=@rate,[AMOUNT]=@amount,[MONTH]=@month,[YEAR]=@year,[PROCESS_TIME]=@process_time WHERE YEAR =@year AND MONTH=@month AND CARDNO=@cardno ;
END ;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Amit saini |
