SuperJWP Ответов: 2

Datagridview автоматически добавляет строку C#


Привет, я новичок в C# и пытаюсь создать систему управления запасами для своей команды.

Я создал форму и проверил, что данные поступают в таблицу базы данных sql, однако каждый раз, когда я запускаю свою форму, dataGridView автоматически добавляет строку.. Во-вторых, я хочу, чтобы мое поле Wkst_Status позволяло ACTIVE быть истинным или видимым и не иметь имени по умолчанию select visible. надеюсь, вы сможете мне помочь в этом отношении.
Заранее спасибо
Джейсон

смотрите код ниже:

this.workstationsTableAdapter.Fill(this.stockInventoryDataSet.Workstations);
            using (SqlConnection con = new SqlConnection())

            {

                con.ConnectionString = (@"Data Source=SH-JASONK\DEV;Initial Catalog=StockInventory;Integrated Security=True");
                con.Open();
                bool status = false;
                if (combostatus.SelectedIndex == 0)
                {
                    status = true;
                }
                else
                {
                    status = false;
                }
                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText =
                       cmd.CommandText = (@"INSERT INTO [StockInventory].[dbo].[Workstations](Emp_Name, 
               Emp_Surname, 
               Department, 
               Company, 
               Hostname, 
               Wkst_Status, 
               Make, Model, 
               SerialNumber, 
               ProductNumber, 
               PurchaseDate, 
               ExpiryDate, 
               Memory, 
               Processor, 
               HDD, 
               OS, 
               MSOffice) 
        VALUES ('" + txtname.Text + "',
                '" + txtsurname.Text + "',
                '" + combodept.Text + "',
                '" + combocompany.Text + "',
                '" + txthostname.Text + "',
                '" + combostatus.Text + "',
                '" + combomake.Text + "',
                '" + txtmodel.Text + "',
                '" + textsn.Text + "',
                '" + txtprodnum.Text + "',
                '" + dateTimePicker1.Value.ToString("yyyy/MM/dd") + "',
                '" + dateTimePicker2.Value.ToString("yyyy/MM/dd") + "',
                '" + combomem.Text + "',
                '" + txtproc.Text + "',
                '" + combohdd.Text + "',
                '" + comboOS.Text + "',
                '" + combooffice.Text + "')");
                    cmd.ExecuteNonQuery();
                    con.Close();

                    //Reading Data:

                    SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM 
                    [StockInventory].[dbo].[Workstations] ", con);
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    
                    foreach (DataRow item in dt.Rows)
                    {
                        int n = dataGridView1.Rows.Add();
                        
dataGridView1.Rows[n].Cells[0].Value = item["Emp_Name"].ToString();
dataGridView1.Rows[n].Cells[1].Value = item["Emp_Surname"].ToString();
dataGridView1.Rows[n].Cells[2].Value = item["Department"].ToString();
dataGridView1.Rows[n].Cells[3].Value = item["Company"].ToString();
dataGridView1.Rows[n].Cells[4].Value = item["Hostname"].ToString();
 bool combostatus = true;
 if (combostatus)
    {
     dataGridView1.Rows[n].Cells[5].Value = "ACTIVE";
    }
       else
    {
       dataGridView1.Rows[n].Cells[5].Value = "INACTIVE";
    }

                        
dataGridView1.Rows[n].Cells[5].Value = item["Make"].ToString();
dataGridView1.Rows[n].Cells[6].Value = item["Model"].ToString();
dataGridView1.Rows[n].Cells[7].Value = item["SerialNumber"].ToString();
dataGridView1.Rows[n].Cells[8].Value = item["ProductNumber"].ToString();
dataGridView1.Rows[n].Cells[9].Value = item["PurchaseDate"].ToString();
dataGridView1.Rows[n].Cells[10].Value = item["ExpiryDate"].ToString();
dataGridView1.Rows[n].Cells[11].Value = item["Memory"].ToString();
dataGridView1.Rows[n].Cells[12].Value = item["Processor"].ToString();
dataGridView1.Rows[n].Cells[13].Value = item["HDD"].ToString();
dataGridView1.Rows[n].Cells[14].Value = item["OS"].ToString();
dataGridView1.Rows[n].Cells[15].Value = item["MSOffice"].ToString();
                    }
                    
                }
            }

        }


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

i have set the AllowUserToAddRows to False in the properties of the dataGridView

2 Ответов

Рейтинг:
2

#realJSOP

Просто ... не делай этого.

0) поместите запрос в сохраненный proc. Таким образом, если запрос в сохраненном proc неверен/нуждается в корректировке, вам не нужно прикасаться к приложению, чтобы заставить его работать.

1) Если вы настаиваете на использовании текста запроса в приложении, используйте "параметризованные запросы" (google-ваш друг). Если вы делаете это так, как вы делаете это сейчас, вы просите о попытках взлома, и вы заслуживаете всего зла, которое постигнет вас в результате.

2) Когда вы исправите эти вещи, отредактируйте свой вопрос здесь, чтобы показать новый код, и мы вам поможем.


Рейтинг:
2

Maciej Los

Ваш код таков SQL-инъекция[^] уязвимый!

Не используйте конкатенированные строки, используйте параметризованные запросы intead!

Я понятия не имею, почему DataGridView отображает дополнительную строку. Вы должны отладить программу, чтобы выяснить, почему это происходит.