Nano Hash - криптовалюты, майнинг, программирование

Реализация Combobox (раскрывающийся список) как часть новой записи БД

У меня есть локальная БД, в которой уже есть записи. В настоящее время я работаю над библиотечным проектом, и у меня есть таблицы книг и категорий (категория также является FK в таблице книг) в БД.

В приложении Windows Forms я пытаюсь реализовать форму для вставки новой записи книги в таблицу книг с использованием поля со списком, когда дело доходит до выбора категории.

До сих пор я пробовал приведенный ниже код. Нажатие кнопки «Сохранить» создает данные в БД, которые указаны в форме, но значение категории всегда равно NULL (поле со списком не работает).

Не могли бы вы помочь мне найти то, что мне не хватает в приведенной ниже реализации, пожалуйста? Приведенный ниже код представляет собой тест, который я сделал только для одного идентификатора категории — геттеры и сеттеры уже реализованы.

РЕДАКТИРОВАТЬ для получения дополнительной информации ниже - ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, я знаю и все еще должен использовать параметризованные запросы, и я рассмотрю это после того, как разберусь с этой проблемой со списком.

 private void AddBookRecordForm_Load(object sender, EventArgs e)
    {
        var dataSource = new List<Category>();

        dataSource.Add(new Category() { CategoryID = '4', CategoryName = "History" });

        cbCategory.ValueMember = "CategoryID";
        cbCategory.DisplayMember = "CategoryName";
        cbCategory.DataSource = dataSource;
    }

РЕДАКТИРОВАТЬ:

 string ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename= 
 C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\Library 
 System Project.mdf ;Integrated Security=True;Connect Timeout=30";

string Query = "insert into Books (BookName, BookAuthor, BookAvailabilityQuantity, Price) values ('" + this.txtName.Text.Trim() 
    + "','" + this.txtAuthor.Text.Trim() 
    + "','" + this.txtAvailabilityQuantity.Text.Trim() 
    + "','" + this.txtPrice.Text.Trim() + "');";

SqlConnection DBCon = new SqlConnection(ConnectionString);
SqlCommand DBCommand = new SqlCommand(Query, DBCon);
SqlDataReader DBReader;

try
{
    DBCon.Open();
    DBReader = DBCommand.ExecuteReader();
    MessageBox.Show("New book record added to the system.", "Library System", MessageBoxButtons.OK);

    while (DBReader.Read())
    {

    }
}

catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

finally
{
    // *** If you're going to be opening a connection be sure to close it ***
    // *** Finally blocks work well for this ***
    DBCon.Close();

    this.txtName.ResetText();
    this.txtAuthor.ResetText();
    this.txtAvailabilityQuantity.ResetText();
    this.txtPrice.ResetText();
}
20.05.2019

  • Можем ли мы увидеть код, который генерирует запись БД? Что он делает для получения и использования значения из cbCategory? 20.05.2019
  • Что-нибудь, пожалуйста, Эд? Я пытался следовать приведенному ниже @Edney, но это не работает 20.05.2019
  • Вы говорите, что хотите добавить категорию в запрос на вставку? 20.05.2019
  • Используйте параметры, чтобы избежать ошибок SQL-инъекций и форматирования. Используйте ExecuteNonQuery для запросов на вставку, обновление и удаление. 21.05.2019

Ответы:


1

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

String Query = "insert into Books (CategoryName, BookName, BookAuthor, BookAvailabilityQuantity, Price) values (
    "'" + cbCategory.Text
    + "','" + this.txtName.Text.Trim() 
    + "','" + this.txtAuthor.Text.Trim() 
    + "','" + this.txtAvailabilityQuantity.Text.Trim() 
    + "','" + this.txtPrice.Text.Trim() + "');";
20.05.2019
  • Это неверно. ComboBox можно использовать в привязке данных 21.05.2019
  • @Crowcoder Если вы читали мой пост, я не говорил, что их нельзя использовать в привязке данных. Я только что сказал, что это один из способов, так как источник данных может предоставить элементы в элементе управления, но выбор нового элемента не изменит автоматически значение данных таким же образом, как изменение значения в связанном текстовом поле. 21.05.2019
  • Я упоминаю об этом, потому что это подразумевало для меня, что вы говорите, что поле со списком не может участвовать в двусторонней привязке. Если бы я так думал, то, думаю, у ОП тоже есть шанс. Если вы сделаете редактирование, я могу снять отрицательный голос. 21.05.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..