首页 > 解决方案 > 正确插入文本框和datagridview c# sql

问题描述

我正在使用一个小型 POS 应用程序,付款数据存储到两个表中之后。来自表格的数据被存储到来自两组数据的两个表中:

  1. 文本框(一般数据,如日期、工人、总数等)——保存在表 1 中
  2. Datagridview(产品信息,如代码、名称、数量、价格等)——保存在表格中

数据被存储到每个表中,因为在表一中插入了很多行,因为 datagridview 有行。更清楚一点:如果 datagridview 有 5 行存储在表 2 中,则表 1 中也有 5 行存储在文本框中重复的相同数据。

我用来插入的代码如下所示:

try
{
     conn.Open();

     foreach (DataGridViewRow row in dtgartikuj.Rows)
     {
          if (!row.IsNewRow)
          {
              SqlCommand cmd = new SqlCommand("insertfaturimi", conn);
              cmd.CommandType = CommandType.StoredProcedure;
              cmd.Parameters.Add(new SqlParameter("@nrfatures", int.Parse(txtnrfatures.Text)));
              cmd.Parameters.Add(new SqlParameter("@klienti",  cmbklienti.Text));
              cmd.Parameters.Add(new SqlParameter("@shenime", txtshenime.Text));
              cmd.Parameters.Add(new SqlParameter("@pagesa", faturimi));
              cmd.Parameters.Add(new SqlParameter("@nentotali", txttotali.Text));
              cmd.Parameters.Add(new SqlParameter("@zbritje", txtzbritja.Text));
              cmd.Parameters.Add(new SqlParameter("@totali", totali.Text));
              cmd.Parameters.Add(new SqlParameter("@vleratvsh", textBox1.Text));
              cmd.Parameters.Add(new SqlParameter("@nrartikujve", lblnumri.Text));
              cmd.Parameters.Add(new SqlParameter("@kasieri", lbluser.Text));
              cmd.Parameters.Add(new SqlParameter("@koha", DateTime.Now));
              cmd.Parameters.Add(new SqlParameter("@barkodi", row.Cells[0].Value));
              cmd.Parameters.Add(new SqlParameter("@emertimi", row.Cells[1].Value));
              cmd.Parameters.Add(new SqlParameter("@sasia", row.Cells[2].Value));
              cmd.Parameters.Add(new SqlParameter("@tvsh", row.Cells[3].Value));
              cmd.Parameters.Add(new SqlParameter("@cmimi", row.Cells[4].Value));
              cmd.Parameters.Add(new SqlParameter("@totalipcs", row.Cells[5].Value));
              cmd.Parameters.Add(new SqlParameter("@vlerapatvshpcs", row.Cells[6].Value));
              cmd.Parameters.Add(new SqlParameter("@vleraetvshpcs", row.Cells[7].Value));

              cmd.ExecuteNonQuery();
           }
        }
    }
    catch(Exception ex)
    {
        MessageBox.Show("Faturimi deshtoi" + ex.ToString());
    }
    finally
    {
        conn.Close();
        clear();
        button5.PerformClick();
    }
}

我使用的存储过程如下所示:

ALTER PROCEDURE [dbo].[insertfaturimi]
    @nrfatures int,
    @barkodi int,
    @emertimi varchar (max),
    @sasia int,
    @tvsh float,
    @cmimi float,
    @totalipcs float,
    @vlerapatvshpcs float,
    @vleraetvshpcs float,
    @klienti varchar(100),
    @pagesa varchar (200),
    @shenime varchar (200),
    @nrartikujve int,
    @vleratvsh float,
    @nentotali float,
    @zbritje float,
    @totali float,
    @kasieri varchar(50),
    @koha datetime
AS
BEGIN
    INSERT INTO tbl_faturimi(ID_FATURES, Klienti, Shenime, Pagesa, Nentotali, Zbritja, Totali, VleraTVSH, NR_artikujve, Kasieri, Data) 
    VALUES (@nrfatures, @klienti, @shenime, @pagesa, @nentotali, @zbritje, @totali, @vleratvsh, @nrartikujve, @kasieri, @koha)

    INSERT INTO tblfaturimi_details (NR_FATURES, Barkodi, Emertimi, Cmimi, Sasia, TVSH, Totali, VleraeTVSH, VleraPaTVSH)
    VALUES (@nrfatures, @barkodi, @emertimi, @cmimi, @sasia, @tvsh, @totalipcs, @vleraetvshpcs, @vlerapatvshpcs)
END

我认为错误来自循环,因为循环内部也是文本框,不仅包括数据网格视图。我试图将插入文本框的代码放在循环之外,但出现错误:

过程或函数指定的参数过多

有人可以告诉代码中要更改的内容。

谢谢!

标签: c#sql-serverinsert

解决方案


推荐阅读