Вставка значения в запись внешнего ключа - PullRequest
0 голосов
/ 03 апреля 2020

Я создаю форму организатора дискографии группы, используя C# / Visual Studio, которая подключена к базе данных SQL Server с тремя таблицами (Bands, Album, Tracks). Я думаю, что я создал таблицы правильно, что касается внешних ключей go, но мне трудно вставить правильное значение во внешние ключи таблиц Album и Track.

Вот как я создал свои таблицы:

IF OBJECT_ID('Bands') IS NULL
    CREATE TABLE Bands 
    (
         id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
         name VARCHAR(50)
    )

IF OBJECT_ID('Albums') IS NULL
    CREATE TABLE Albums 
    (
         id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
         title VARCHAR(50),
         release_date DATE,
         band_id INT FOREIGN KEY REFERENCES Bands(id)
    )

IF OBJECT_ID('Tracks') IS NULL
    CREATE TABLE Tracks 
    (
         id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
         title VARCHAR(50),
         album_id INT FOREIGN KEY REFERENCES Albums(id),
         band_id INT FOREIGN KEY REFERENCES Bands(id)
    )

И вот как я сейчас пытаюсь добавить значения в таблицу Albums. Я передаю объект Album, который содержит название альбома и дату выпуска, а также строку названия группы, которая уже была добавлена ​​в таблицу Bands:

    public static void InsertAlbumName(Album albumTitle, string bandName) 
    {
        string connString = "my connection string here";
        string sqlStatement = "INSERT INTO Albums ([Title], [Release_Date], [band_id]) VALUES (@title, @releaseDate, (SELECT id FROM Bands WHERE name = '@name'))";

        using (SqlConnection conn = new SqlConnection(connString))
        {
            conn.Open();

            using (SqlCommand cmd = new SqlCommand(sqlStatement, conn))
            {
                cmd.Parameters.Add("@name", SqlDbType.NText);
                cmd.Parameters["@name"].Value = bandName;

                cmd.Parameters.Add("@title", SqlDbType.NText);
                cmd.Parameters["@title"].Value = albumTitle.AlbumTitle;

                cmd.Parameters.Add("@releaseDate", SqlDbType.Date);
                cmd.Parameters["@releaseDate"].Value = albumTitle.ReleaseDate;

                cmd.ExecuteNonQuery();
            }
        }
    }

Я не знаю Ошибка и все значения добавляются, кроме внешнего ключа band_id, который остается NULL. Дайте мне знать, что я могу добавить еще кое-что. Трудно сформулировать то, что я спрашиваю ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...