为什么没有将数据插入数据库,C#datagridview

时间:2020-11-03 11:50:57

标签: c# sql

我正在尝试插入或更新(基于数据库中是否存在产品)

       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();
                }
            }
        }
    }

首先我正在检查条形码是否确实存在(cmdkontrolla.Parameters.AddWithValue(“ @ barkodi”,Convert.ToString(dtgartikulli.Rows [i] .Cells [0] .Value)); )

SP代码:

    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

如果count == 0,则应插入数据 否则,如果count == 1,则应该更新数据(提供了数量)

对现有数据的数量更新正在执行中(计数== 1情况),但是如果数据不存在则不插入新产品(计数== 0情况) 计数== 1块代码内的代码有什么问题

谢谢大家

1 个答案:

答案 0 :(得分:0)

您是否检查过表格上的Stoku字段是否不为null?因为如果value = null,那么更新中传递的所有值都不会更改字段的值。

update tabela_produktet set Stoku = Stoku + @sasi
   where
   Barkodi = @barkodi

也许您可以将命令更改为:

更新tabela_produktet设置Stoku = ISNULL(Stoku,0)+ @sasi 哪里 Barkodi = @barkodi

如果您的问题出在Count == 0,那么我已经成功尝试了此代码。

 SqlConnection conn = new SqlConnection("Server=(localdb)\\MSSQLLocalDB;Database=xxxxx;Integrated Security=True;");
            try
            {
                var codebar = 12345;
                SqlParameter[] parameters = new SqlParameter[]
                {
                new SqlParameter("@ProductId", codebar)
                };

                conn.Open();
                SqlCommand cmd = new SqlCommand("spu_GetCodeBar", conn);
                cmd.Parameters.AddRange(parameters);
                cmd.CommandType = CommandType.StoredProcedure;

                var reader = cmd.ExecuteReader();

                if (reader != null && reader.Read()) 
                {
                    var code = reader["ProductID"];
                    MessageBox.Show($"I've found the record {code}!");
                    // do what you want to do
                }
                else
                {
                    MessageBox.Show("Record not found!");
                }
            }
            finally
            {
                conn.Close();
            }
相关问题