Вставка текстовых полей и datagridview в SQL - таблицы C# winform
Hi everyone. I am working with a small POS application , and after the payment data are stored into two tables. From the form data are stored into two tables from two group of data : 1. Textboxes (general data like date, worker , total etc)-- saved in table 1 2. Datagridview (Product informations like code, name, qty , price etc) -- saved in table Data are being stored into each tables, for in table one there are much rows inserted as the datagridview hass rows. To be more clearer : if datagridview has 5 rows stored in tables 2, there are also 5 rows stored in table one with same data repeated from textboxes. The code I used to insert is showed below: 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(); } } <pre lang="c#">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(); } }
пробовать
{
Коннектикут.Открыть();
по каждому элементу (ячейки datagridviewrow Row в dtgartikuj.Строки)
{
если (!row.IsNewRow)
{
SqlCommand cmd = new SqlCommand("insertfaturimi", conn);
УМК.CommandType = CommandType.Хранимая процедура;
cmd.параметры.Add(new SqlParameter("@nrfatures", int.Parse(txtnrfatures.Текст)));
cmd.параметры.Добавить(новый SqlParameter ("@klienti", cmbklienti.Text));
cmd.параметры.Add(new SqlParameter ("@shenime", txtshenime.Текст));
cmd.параметры.Добавить(новый SqlParameter ("@pagesa", faturimi));
cmd.параметры.Добавить(новый SqlParameter ("@nentotali", txttotali.Text));
cmd.параметры.Добавить(новый SqlParameter ("@zbritje", txtzbritja.Text));
cmd.параметры.Добавить(новый SqlParameter ("@totali", totali.Text));
cmd.параметры.Добавить(новый SqlParameter ("@vleratvsh", textBox1.Text));
cmd.параметры.Добавить(новый SqlParameter ("@nrartikujve", lblnumri.Text));
cmd.параметры.Добавить(новый SqlParameter ("@kasieri", lbluser.Text));
cmd.параметры.Добавить(новый SqlParameter ("@koha", DateTime.Now));
cmd.параметры.Добавить(новый SqlParameter ("@barkodi", строка.Ячейки[0].Значение));
cmd.параметры.Добавить(новый SqlParameter ("@emertimi", строка.Ячейки[1].Значение));
cmd.параметры.Добавить(новый SqlParameter ("@sasia", строка.Ячейки[2].Значение));
cmd.параметры.Добавить(новый SqlParameter ("@tvsh", строка.Ячейки[3].Значение));
cmd.параметры.Добавить(новый SqlParameter ("@cmimi", строка.Ячейки[4].Значение));
cmd.параметры.Добавить(новый SqlParameter ("@totalipcs", строка.Ячейки[5].Значение));
cmd.параметры.Добавить(новый SqlParameter ("@vlerapatvshpcs", строка.Ячейки[6].Значение));
cmd.параметры.Добавить(новый SqlParameter ("@vleraetvshpcs", строка.Ячейки[7].Значение));
УМК.Метод executenonquery();
}
}
}
поймать(исключение бывший)
{
Ящик для сообщений.Шоу("Faturimi deshtoi" + ex.ToString());
}
наконец
{
Коннектикут.Закрывать();
понятно();
button5.PerformClick();
}
}
А хранимые процедуры, которые я использовал, показаны ниже:
Изменить процедуру [dbo].[insertfaturimi]
@nrfatures инт,
@barkodi int,
@emertimi varchar (Макс),
@sasia int,
@поплавок твш ,
@поплавок cmimi ,
@totalipcs поплавок,
@vlerapatvshpcs поплавок,
@vleraetvshpcs поплавок,
@klienti varchar(100),
@pagesa varchar (200),
@shenime varchar (200),
@nrartikujve инт,
@поплавок vleratvsh ,
@nentotali поплавок,
@zbritje поплавок,
@totali float,
@kasieri varchar(50),
@koha datetime
как
начать
вставить в tbl_faturimi(ID_FATURES, Klienti,Shenime,Pagesa,Nentotali,Zbritja,Totali,VleraTVSH,NR_artikujve,Kasieri, Data) значения
(@nrfatures,@klienti,@shenime,@pagesa,@nentotali,@zbritje,@totali,@vleratvsh,@nrartikujve,@kasieri,@koha)
вставить в tblfaturimi_details (NR_FATURES,Barkodi,Emertimi,Cmimi,Sasia,TVSH,Totali,VleraeTVSH,VleraPaTVSH)значения
(@nrfatures,@barkodi,@emertimi,@cmimi,@sasia,@tvsh,@totalipcs,@vleraetvshpcs,@vlerapatvshpcs)
конец
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
Изменить процедуру [dbo].[insertfaturimi]
@nrfatures инт,
@barkodi int,
@emertimi varchar (Макс),
@sasia int,
@поплавок твш ,
@поплавок cmimi ,
@totalipcs поплавок,
@vlerapatvshpcs поплавок,
@vleraetvshpcs поплавок,
@klienti varchar(100),
@pagesa varchar (200),
@shenime varchar (200),
@nrartikujve инт,
@поплавок vleratvsh ,
@nentotali поплавок,
@zbritje поплавок,
@totali float,
@kasieri varchar(50),
@koha datetime
как
начать
вставить в tbl_faturimi(ID_FATURES, Klienti,Shenime,Pagesa,Nentotali,Zbritja,Totali,VleraTVSH,NR_artikujve,Kasieri, Data) значения
(@nrfatures,@klienti,@shenime,@pagesa,@nentotali,@zbritje,@totali,@vleratvsh,@nrartikujve,@kasieri,@koha)
вставить в tblfaturimi_details (NR_FATURES,Barkodi,Emertimi,Cmimi,Sasia,TVSH,Totali,VleraeTVSH,VleraPaTVSH)значения
(@nrfatures,@barkodi,@emertimi,@cmimi,@sasia,@tvsh,@totalipcs,@vleraetvshpcs,@vlerapatvshpcs)
конец
Я думаю , что ошибка происходит из цикла, потому что внутри цикла также находится текстовое поле, включенное не только в datagridview. Я попытался поместить код , вставляющий текстовые поля вне цикла, но получил такую ошибку:**“процедура или функция имеет слишком много заданных аргументов”**
Может ли кто-нибудь сказать, что нужно изменить в коде?
Спасибо!!!
Что я уже пробовал:
Код, который я попробовал, находится внутри вопроса
CHill60
Почему вы используете cmd.Parameters.AddWithValue
для некоторых параметров но cmd.Parameters.Add(new SqlParameter(
для других? AddWithValue я думаю это рекомендуемый подход
Jörgen Andersson
Нет, AddWithValue-это не рекомендуемый подход, подробнее о том, почему здесь: https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
tldr; AddWithValue может принять неправильный тип, если он делает неверное предположение из значения, которое может создать или не создать ошибку.
CHill60
Поверь мне, я пойму это совершенно неправильно!
К счастью, ОП, должно быть, прочитал ваш комментарий и пошел правильным путем.
Спасибо за поправку.
Jörgen Andersson
Не беспокойтесь.
У меня нет проблем с пониманием того, почему люди хотят использовать более простой в использовании метод, но я не понимаю, почему MS не исправляет его. (Или на самом деле удалить его)
[no name]
Я изменил код , но все та же проблема, что и упоминалось выше
Jörgen Andersson
Какую ошибку вы получаете, когда не вставляете текстовые поля вне цикла?
[no name]
@Йорген Андерссон, - процедура или функция имеет слишком много аргументов