Member 12496235 Ответов: 0

Вставка текстовых полей и 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]

@Йорген Андерссон, - процедура или функция имеет слишком много аргументов

0 Ответов