Попытка вставить/обновить базу данных на основе данных datagridview C# SQL
Я пытаюсь сделать вставку или обновление(в зависимости от того, существует ли продукт в БД)
В случае, если count ==0, данные должны быть вставлены
В противном случае, если count ==1 Данные должны быть обновлены (где указано кол-во)
Обновление qty для существующих данных выполняется нормально( count==1 случай), но новый продукт не вставляется, если данные не существуют( count==0 случай)
Что не так с кодом внутри count ==1 block code
Спасибо всем
Что я уже пробовал:
for (int i = 0; i < dtgartikulli.Rows.Count; i++) { SqlCommand cmdkontrolla = new SqlCommand("barkodicheck", conn); cmdkontrolla.CommandType = CommandType.StoredProcedure; cmdkontrolla.Parameters.AddWithValue("@barkodi", Convert.ToString(dtgartikulli.Rows[i].Cells[0].Value)); SqlDataAdapter adapt = new SqlDataAdapter(cmdkontrolla); DataSet ds = new DataSet(); adapt.Fill(ds); conn.Close(); int count = ds.Tables[0].Rows.Count; //nese është barazi me 1, shfaqe dritaren pasuese if (count == 0) { SqlCommand cmdinsertimi = new SqlCommand("insertprodukti", conn); cmdinsertimi.CommandType = CommandType.StoredProcedure; SqlParameter ibarkodi = cmdinsertimi.Parameters.Add("@barkodi", SqlDbType.Int); SqlParameter iemertimi = cmdinsertimi.Parameters.Add("@emertimi", SqlDbType.VarChar, 200); SqlParameter isasia = cmdinsertimi.Parameters.Add("@sasia", SqlDbType.Int); SqlParameter istoku = cmdinsertimi.Parameters.Add("@stoku", SqlDbType.Int); SqlParameter icmimi = cmdinsertimi.Parameters.Add("@cmimi", SqlDbType.Float); SqlParameter icmimif = cmdinsertimi.Parameters.Add("@cmimif", SqlDbType.Float); SqlParameter ifitimi = cmdinsertimi.Parameters.Add("@fitimi", SqlDbType.Float); SqlParameter itvsh = cmdinsertimi.Parameters.Add("@tvsh", SqlDbType.Float); SqlParameter ikategoria = cmdinsertimi.Parameters.Add("@kategoria", SqlDbType.VarChar, 100); SqlParameter idata = cmdinsertimi.Parameters.Add("@data", SqlDbType.DateTime); SqlParameter ishtuarnga = cmdinsertimi.Parameters.Add("@shtuarnga", SqlDbType.VarChar, 100); SqlParameter injesia = cmdinsertimi.Parameters.Add("@njesia", SqlDbType.VarChar, 50); foreach (DataGridViewRow row in dtgartikulli.Rows) { if (!row.IsNewRow) { ibarkodi.Value = row.Cells[0].Value; iemertimi.Value = row.Cells[1].Value; isasia.Value = "1"; istoku.Value = row.Cells[3].Value; icmimi.Value = row.Cells[2].Value; icmimif.Value = row.Cells[4].Value; ifitimi.Value = row.Cells[5].Value; itvsh.Value = row.Cells[7].Value; ikategoria.Value = row.Cells[6].Value; idata.Value = DateTime.Now; ishtuarnga.Value = lbluseri.Text; injesia.Value = row.Cells[9].Value; cmdinsertimi.ExecuteNonQuery(); } } } else if (count == 1) { for (int j = 0; j < dtgartikulli.Rows.Count; j++) { SqlCommand cmdeditimi = new SqlCommand("updatestokublerja", conn); cmdeditimi.CommandType = CommandType.StoredProcedure; cmdeditimi.Parameters.AddWithValue("@barkodi", Convert.ToString(dtgartikulli.Rows[j].Cells[0].Value)); cmdeditimi.Parameters.AddWithValue("@sasi", Convert.ToString(dtgartikulli.Rows[j].Cells[3].Value)); conn.Open(); cmdeditimi.ExecuteNonQuery(); conn.Close(); } } clear(); conn.Close(); dtgartikulli.DataSource = null; dtgartikulli.Refresh(); } } } } First i am checking if that barcode does exist( cmdkontrolla.Parameters.AddWithValue("@barkodi", Convert.ToString(dtgartikulli.Rows[i].Cells[0].Value)); ) SP CODE: ALTER procedure [dbo].[barkodicheck] @barkodi int as select Barkodi from tabela_produktet where Barkodi = @barkodi ALTER procedure [dbo].[updatestokublerja] @barkodi int, @sasi int as update tabela_produktet set Stoku = Stoku + @sasi where Barkodi = @barkodi
Gerry Schmitz
Вы просто "стреляете и забываете". Никакого состояния или обработки ошибок. Не пытайся ... лови. Насколько нам известно, это работает.
Member 14947303
есть "попробуй", "поймай" и "наконец", но я не ставил их под сомнение, потому что это ограничивало меня. Внутри try находится верхний код, а в catch-исключение ex error, а в finally-четкое и тесное соединение
Но весь код не является; wroking, как я уже сказал в верхнем вопросе
Member 14947303
Я проверил код. Когда есть строки только в случае count==0(процесс вставки выполняется идеально), но когда есть несколько строк в обоих случаях( count==0 и count=1), Процесс вставки не выполняется, выполняется только процесс обновления
Gerry Schmitz
Вы говорите, что вставка не работает, но обновление работает.
1) Как вы получили запись для "обновления", если вы не можете вставить.
2) если вставка не работает, то почему показываются только те SP, которые работают?
Member 14947303
Вы, сэр, не поняли вопроса или, чтобы быть более ясным, вы не прочитали весь вопрос. Вопрос был и есть:
Сначала, когда я нажимаю кнопку Сохранить, данные в datagridview собираются проверить, существуют ли они в sql. Если он существует (count ==1), то используйте update SP( update the old qty+ new qty), если данные не существуют (count==0), то вставьте данные из datagridview.