Как ввести значение из базы данных в текстовое поле при выборе значения из раскрывающегося списка - PullRequest
0 голосов
/ 17 декабря 2018

В настоящее время у меня есть выпадающий список, который заполняется местоположениями из таблицы местоположений в моей базе данных.Таблица расположения alco содержит столбец «Мили».

То, что я пытаюсь сделать, - это когда в раскрывающемся списке выбрано место, в текстовое поле будут добавлены мили.

Я пробовал этот код;

public string conString = "Data Source=DESKTOP-86TC1QA\\MSSSQLSERVER17;Initial Catalog=AttendanceApp;Integrated Security=True";

    private void location_comboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(conString);
        SqlCommand cmd = new SqlCommand("SELECT * FROM Location_Table WHERE Miles = '" + location_comboBox.Text + "'",con);
        con.Open();
        cmd.ExecuteNonQuery();
        SqlDataReader dr;
        dr = cmd.ExecuteReader();
        while (dr.Read())

        {
            var Miles = (string)dr["Miles"].ToString();
            mileage_textbox.Text = Miles;
        }
        con.Close();
    } 

, но генерируется следующая ошибка, и я не уверен, как ее исправить.

System.Data.SqlClient.SqlException: 'Ошибка преобразования типа данных varchar в числовой.'

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Вы можете использовать это:

var conString = "Data Source=DESKTOP-86TC1QA\\MSSSQLSERVER17;Initial Catalog=AttendanceApp;Integrated Security=True";

using (var connection = new SqlConnection(connectionString)) {
    connection.Open();
    using (var command = new SqlCommand("SELECT * FROM Location_Table WHERE Location 
    = @location", connection)) {
        command.Parameters.Add(new SqlParameter("location", Int32.Parse(location_comboBox.SelectedValue.ToString());
        var reader = command.ExecuteReader();
        while (reader.Read()) {
            var Miles = (string)dr["Miles"].ToString();
            mileage_textbox.Text = Miles;
        }
    }
}

Всегда хорошая идея избавиться от ресурсов.Кроме того, location_combobox - это запутанное имя для выпадающего списка.

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

Int32.Parse(dropdown.SelectedValue.ToString());
0 голосов
/ 17 декабря 2018

Пожалуйста, измените SQL-запрос, как показано ниже данного запроса, потому что мили, кажется, числовые в таблице SQL:

SqlCommand cmd = new SqlCommand("SELECT * FROM Location_Table WHERE Miles = " + 
location_comboBox.Text, con);
0 голосов
/ 17 декабря 2018

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

Сначала вам нужно изменить имя столбца.Предполагая, что таблица имеет имя столбца Location, тогда запрос должен выглядеть следующим образом -

      SqlCommand cmd = new SqlCommand("SELECT * FROM Location_Table WHERE Location = 
      '" + location_comboBox.Text + "'",con);

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

        // 1. Create SQL Command  
        SqlCommand cmd = new SqlCommand("SELECT * FROM Location_Table WHERE Location 
        = @location", conn);

        // 2. define parameters used in above command 
        SqlParameter param  = new SqlParameter();
        param.ParameterName = "@location";
        param.Value         = location_comboBox.Text;

        // 3. add new parameter to command 
        cmd.Parameters.Add(param);

        // get data stream
        dr= cmd.ExecuteReader();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...