Я создаю форму организатора дискографии группы, используя 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
. Дайте мне знать, что я могу добавить еще кое-что. Трудно сформулировать то, что я спрашиваю ...