houssem eddine ayari Ответов: 1

Как получить идентификатор выбранного элемента в combobox C#


Привет, я работаю с combobox в своем проекте windowsForm.
Я получаю атрибут "LIB" из табличного значения sql server, показанного в выпадающем списке.
Мне нужно получить еще один атрибут "GUID" selectedItem и передать его из первой формы (FormMaster) в другую форму (FormImport).

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

int ScénarioIndex = comboBox3.SelectedIndex;                     
             SqlCommand cmd = new SqlCommand("SELECT [OID] FROM [AffecAnalytique].[dbo].[DESCRIPTIF] WHERE [LIBELLE]='" + comboBox3.Items[ScénarioIndex] + "' ", con);
             con.Open();
             SqlDataReader rdr = cmd.ExecuteReader();
             if (rdr.HasRows)
             {
                 string strOIDe = (string)rdr["OID"];
                 MessageBox.Show(strOIDe,"OID"); 
             }
             con.Close();

Richard MacCutchan

Где находится GUID-в выпадающем списке или в базе данных?

houssem eddine ayari

В базе данных

Richard Deeming

SqlCommand cmd = new SqlCommand("SELECT [OID] FROM [AffecAnalytique].[dbo].[DESCRIPTIF] WHERE [LIBELLE]='" + comboBox3.Items[ScénarioIndex] + "' ", con);

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

using (SqlCommand cmd = new SqlCommand("SELECT [OID] FROM [AffecAnalytique].[dbo].[DESCRIPTIF] WHERE [LIBELLE] = @LIBELLE", con))
{
    cmd.Parameters.AddWithValue("@LIBELLE", comboBox3.Items[ScénarioIndex]);
    
    con.Open();
    object result = cmd.ExecuteScalar();
    if (result != null && !Convert.IsDBNull(result))
    {
        string strOIDe = (string)result;
        MessageBox.Show(strOIDe,"OID"); 
    }
}

houssem eddine ayari

Ничего не возвращается. Даже пустого почтового ящика нет

Richard Deeming

Тогда в вашей базе данных нет соответствующей записи.

houssem eddine ayari

Значение LIBELLE, выбранное с помощью combobox, существует в моей базе данных. Я только что обновил свой код, чтобы показать messagebox внутри условия if, и ничего не было показано.

Richard MacCutchan

Используйте отладчик для проверки строки SQL, чтобы убедиться, что она передает допустимые данные.

1 Ответов

Рейтинг:
12

Gerry Schmitz

Ваша текущая привязка слишком упрощена. Следующий паттерн более полезен для многих ситуаций, включая вашу текущую.

Получить выделенный текст и значение ComboBox в приложении Windows с помощью C# и VB.Net[^]


houssem eddine ayari

У меня просто есть вопрос: как я могу добавить статический текст в DisplayMember. comboBox3.DisplayMember ="LIBELLE"; --> получить данные из БД.
Я хочу, чтобы данные были показаны в моем combobox следующим образом - > сценарий: LIBELLE