Member 12977712 Ответов: 1

Переход к следующей строке в зависимости от значения из столбца В C#


- Привет!

Поэтому я пытаюсь создать код, который позволяет мне вставлять значения в мою базу данных. Перед выполнением команды Insert он проверит значение столбца, если оно существует. Если она существует, то эта строка не будет добавлена в базу данных, если она не существует, то она будет вставлена в нее.

Что я уже пробовал:

<pre> for (int row = 0; row< dataGridView1.Rows.Count; row++)
                    {
                        con = new SqlConnection(cs.DBConnPS);
                        con.Open();
                        //I've tried this
                        if (dataGridView1.Rows[linhas].Cells[8].Value.ToString() == "M")
                        {
                            linhas = linhas + 1;
                        }


                        string queryInsert = @"INSERT INTO Table1(Cargs, Refed, Qty, Date, Line, Mark, DescripWeb, CodeProd, TypeEmb, NamePC) VALUES(@Cargs, @Refed, @Qty, @Date, @Line, @Mark, @DescripWeb, @CodeProd, @TypeEmb, @NamePC)";
                        cmd = new SqlCommand(queryInsert);
                        cmd.Connection = con;

                        cmd.Parameters.Add(new SqlParameter("@Cargs", SqlDbType.VarChar, 11, "Cargs"));
                        cmd.Parameters.Add(new SqlParameter("@Refed", SqlDbType.VarChar, 30, "Refed"));
                        cmd.Parameters.Add(new SqlParameter("@Qty", SqlDbType.Decimal, 11, "Qty"));
                        cmd.Parameters.Add(new SqlParameter("@Date", SqlDbType.SmallDateTime, 11, "Date"));
                        cmd.Parameters.Add(new SqlParameter("@Line", SqlDbType.SmallInt, 4, "Line"));
                        cmd.Parameters.Add(new SqlParameter("@Mark", SqlDbType.VarChar, 11, "Mark"));
                        cmd.Parameters.Add(new SqlParameter("@DescripWeb", SqlDbType.VarChar, 150, "DescripWeb"));  
                        cmd.Parameters.Add(new SqlParameter("@CodeProd", SqlDbType.VarChar, 20, "CodeProd"));
                        cmd.Parameters.Add(new SqlParameter("@TypeEmb", SqlDbType.VarChar, 8, "TypeEmb"));
                        cmd.Parameters.Add(new SqlParameter("@NamePC", SqlDbType.VarChar, 30, "NamePC"));

                        cmd.Parameters["@Cargs"].Value = dataGridView1.Rows[linhas].Cells[0].Value.ToString();
                        cmd.Parameters["@Refed"].Value = dataGridView1.Rows[linhas].Cells[1].Value.ToString();
                        cmd.Parameters["@Qty"].Value = dataGridView1.Rows[linhas].Cells[2].Value.ToString();
                        cmd.Parameters["@Date"].Value = dataGridView1.Rows[linhas].Cells[3].Value.ToString();
                        cmd.Parameters["@Line"].Value = dataGridView1.Rows[linhas].Cells[4].Value.ToString();
                        cmd.Parameters["@Mark"].Value = dataGridView1.Rows[linhas].Cells[5].Value.ToString();
                        cmd.Parameters["@DescripWeb"].Value = dataGridView1.Rows[linhas].Cells[6].Value.ToString();
                        cmd.Parameters["@CodeProd"].Value = dataGridView1.Rows[linhas].Cells[7].Value.ToString();
                        cmd.Parameters["@TypeEmb"].Value = dataGridView1.Rows[linhas].Cells[8].Value.ToString();
                        cmd.Parameters["@NamePC"].Value = System.Environment.MachineName;

                        cmd.ExecuteNonQuery();
                    }


Что я мог сделать?

1 Ответов

Рейтинг:
1

CHill60

Вы могли бы сделать что-то вроде

string queryInsert = @"IF NOT EXISTS (SELECT Cargs FROM Table1 WHERE Refed=@Refed) BEGIN INSERT INTO Table1(Cargs, Refed, Qty, Date, Line, Mark, DescripWeb, CodeProd, TypeEmb, NamePC) VALUES(@Cargs, @Refed, @Qty, @Date, @Line, @Mark, @DescripWeb, @CodeProd, @TypeEmb, @NamePC) END";

Или просто сначала запросите строку в вашем коде C# и используйте простой оператор c# if.
Пример, который я привел, предполагает, что Refed это уникальный идентификатор записи - возможно, вам придется включить другие столбцы, чтобы определить, существует ли уже точная строка


Member 12977712

Используя его, он просто добавит мне одну строку, а не все ее строки