Я работаю с небольшим POS-приложением, а после оплаты данные сохраняются в две таблицы. Из формы данные хранятся в двух таблицах из двух групп данных:
- Текстовые поля (общие данные, такие как дата, работник, итог и т. Д. c) - сохраняются в таблице 1
Данные хранятся в каждой таблице, поскольку в первой таблице много строк вставлено в виде у 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
Я думаю, что ошибка от l oop, потому что внутри l oop также есть текстовое поле, включенное не только обзор данных. Я пытался поместить код, который вставляет текстовые поля вне l oop, но я получаю сообщение об ошибке:
В процедуре или функции указано слишком много аргументов
Возможно кто-то скажет, что нужно изменить в коде.
Спасибо!