Nganku Junior Ответов: 4

Как заполнить combobox данными из столбца таблицы базы данных SQL server


Привет, я пытался установить в качестве источника данных combobox( в данном случае combobox2) данные в столбце таблицы базы данных SQL под названием "BulkInput" без особого успеха. Когда я запускаю код, то ComboBox остается пустым.
Пожалуйста, смотрите код ниже:

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

private void button2_Click(object sender, EventArgs e) 
{ 
   try { 
      SqlConnection bscn = new SqlConnection("Data Source=PV10\\LOCALSERVER;Initial Catalog=SmallSoftwareDB;Integrated Security=True;Pooling=False"); 
      bscn.Open(); 
      string ins = "insert into BulkSale(ProductSource, Date, Quantity, Type, UnitPrice, Total) values('" + textBox2.Text + "', '" + dateTimePicker1.Value + "', '" + textBox3.Text + "', '" + comboBox1.Text + "', '" + textBox4.Text + "', '" + textBox5.Text + "' )";
      string sPN = "select ProductName from BulkInput"; 
      SqlCommand P = new SqlCommand(ins, bscn); 
      SqlCommand Q = new SqlCommand(sPN, bscn); 
      SqlDataReader mRead; 
      mRead = Q.ExecuteReader(); 
      while(mRead.Read())
      { 
         comboBox2.Items.Add(mRead["ProductName"].ToString()); 
      } 
      MessageBox.Show("Successfully Completed.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
      bscn.Close(); 
   } 
   catch (Exception exc) 
   { 
      MessageBox.Show(exc.Message, " ", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); 
   } 
}

NotPolitcallyCorrect

Возможно, кто-то выполнил атаку SQL-инъекции на вашу базу данных, используя ваш код, и в вашей базе данных нет ничего, что можно было бы вернуть.

4 Ответов

Рейтинг:
34

zamanipour

Вы просто забываете выполнить команду insert 'P'! :)


Nganku Junior

Вставить команду? Где именно

Рейтинг:
2

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.

Цитата:
string ins = "insert into BulkSale(ProductSource, Date, Quantity, Type, UnitPrice, Total) values('" + textBox2.Text + "', '" + dateTimePicker1.Value + "', '" + textBox3.Text + "', '" + comboBox1.Text + "', '" + textBox4.Text + "', '" + textBox5.Text + "' )";

Этот код подлежит SQL-инъекции
SQL-инъекция-Википедия, свободная энциклопедия[^]
SQL-инъекция[^]


Рейтинг:
2

Nganku Junior

Мне пришлось инициализировать копирование при инициализации формы. Спасибо за ваши комментарии :)



public B()
        {
            InitializeComponent();

            SqlConnection con = new SqlConnection("Data Source=PV10\\LOCALSERVER;Initial Catalog=SmallSoftwareDB;Integrated Security=True;Pooling=False");
            con.Open();
            string sPn = "select ProductName from BulkInput";
            SqlCommand CsPn = new SqlCommand(sPn, con);

            SqlDataReader mDr;
            mDr = CsPn.ExecuteReader();
            while (mDr.Read())
            {
                comboBox2.Items.Add(mDr["ProductName"].ToString());
            }

        }


Рейтинг:
1

Wendelius

Если это Windows forms, то одним из простых способов заполнения комбо будет извлечение данных, например, в таблицу данных и установка свойства dataSource поля со списком в представление таблицы данных по умолчанию. Вам также необходимо установить свойства DisplayMember и ValueMember, чтобы управлять тем, что отображается в поле со списком и что является ключевым значением. Конечно, вы можете просто добавить значения из считывателя, но все, как правило, усложняется, если вы используете отдельный ключевой столбец.

Для получения дополнительной информации взгляните на
- комбинированный список.Свойство DataSource (System.Окна.Формы)[^]
- Элементе управления listcontrol.Свойство DisplayMember (System.Окна.Формы)[^]
- а вот пример Привязка к ComboBox с помощью DataTable и Linq-Deborah & amp;#039;s Developer MindScape[^]

Другое дело, как вы используете данные из пользовательского интерфейса, чтобы вставить их в базу данных. В настоящее время вы объединяете значения непосредственно с инструкцией SQL. Это создает ряд рисков и проблем, таких как SQL-инъекция. Правильным способом было бы использовать параметры. Взгляните на Правильное выполнение операций с базой данных[^]