Преобразование идентификатора внешнего ключа (C # в SQL Server) - PullRequest
1 голос
/ 19 мая 2019

У меня есть созданная локальная база данных (SQL Server), подключенная к приложению библиотеки, над которым я работаю, в котором есть несколько таблиц / записей - в данном конкретном случае я буду ссылаться на Книги таблица:

ID (PK),
Name,
Author,
CategoryID (FK),
Price

А также таблица Категория :

ID,
CategoryName

Я пытаюсь сделать следующее: у меня есть «Новая книга»Форма записи;После того, как сведения о книге заполнены и нажата кнопка «Сохранить», она создает (с помощью запроса на вставку) запись в моей локальной базе данных приложения библиотеки в таблице Книги .

КакПример проблемы: при попытке сохранить новую запись (я отправляю «История» в текстовом поле Категория ) приложение отображает ошибку

Преобразование не удалось при преобразованиизначение varchar для типа данных int

Как я понимаю, проблема в том, что History не преобразуется в CategoryID (FK), который находится в таблице Books, что отражается как

ID: 4 - CategoryName: History 

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

Помощь будет принята с благодарностью.

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, CategoryID, ClassificationID, BookAvailabilityQuantity, Price) values ('" + this.txtName.Text.Trim() + "','" + this.txtAuthor.Text.Trim() + "','" + this.txtCategory.Text.Trim() + "','" + this.txtClassification.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.txtCategory.ResetText();
    this.txtClassification.ResetText();
    this.txtAvailabilityQuantity.ResetText();
    this.txtPrice.ResetText();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...