Не удалось включить ограничения.Одна или несколько строк содержат значения, нарушающие ненулевые, уникальные или внешние ключи - PullRequest
0 голосов
/ 08 января 2011

Привет.У меня проблема.я хочу получить информацию о пакете из базы данных и связать программное обеспечение с этим пакетом ..

мой БД выглядит следующим образом.

create table Package
(
    PackageID int identity,
    PackageName varchar(50) not null,
    PackageDiscription varchar(max) not null,
    primary key (PackageID)
)



create table Software
(
    SoftwareID varchar(50) not null,
    SoftwareName varchar(50) not null,
    DownloadPath varchar(100) not null,
    PackageID int,
    Primary key (SoftwareID),
    Foreign Key (PackageID) references Package on delete cascade on update cascade
)

я пытаюсь сделать следующее:

protected void BtnPackageSelect_Click(object sender, EventArgs e)
{
    SoftwareTableAdapters.PackageTableAdapter p = new SoftwareTableAdapters.PackageTableAdapter();
    SoftwareTableAdapters.SoftwareTableAdapter s = new SoftwareTableAdapters.SoftwareTableAdapter();

    foreach(var item in p.GetSelectedPackage(DropDownList1.SelectedValue))
    {
        string PackageName = item.PackageName;
        int PackageID = item.PackageID;
        string PackageDiscription = item.PackageDiscription;

        Label1.Text = "Name: " + PackageName;
        Label1.Visible = true;
        Label2.Text = "ID: " + PackageID;
        Label2.Visible = true;
        Label3.Text = "Discription: " + PackageDiscription;
        Label3.Visible = true;
        ListBox2.Visible = true;

        foreach (var software in s.GetSelectedIndexSoftware(PackageID)) <----- this is there the error come.
        {
            ListBox2.Items.Add(software.SoftwareName);
        }
    }
}

метод GetSelectedIndexSoftware (packageID) выглядит следующим образом:

SELECT SoftwareName
FROM Software
WHERE (PackageID = @PackageID)

все, что я получил в базе данных сейчас:

insert into Package values('1', '1')
insert into Package values('2', '2')

insert into Software values('1', '1', '1', null)
insert into Software values('2', '2', '2', null)
insert into Software values('3', '3', '3', null)
insert into Software values('4', '4', '4', null)

, где все программное обеспечение равно нулюбыли обновлены с 1

Я довольно плохо знаком с кодированием, поэтому я немного потерян .. Надеюсь, кто-то может помочь мне найти проблему

------ EDIT 1 ---- Теперь я попытался изменить создание программного обеспечения, чтобы оно не разрешало null, а затем создать пакет, который сначала называется несвязанным, с которым будет связано все программное обеспечение, которое еще не связано с пакетом.При создании создается с 1 в PackageID.Это не помогло.

------ РЕДАКТИРОВАНИЕ 2 ----- Теперь я попытался не иметь внешний ключ в таблице программного обеспечения.не помог или

1 Ответ

2 голосов
/ 08 января 2011

Я думаю, что причина того, что вы получаете ошибку, заключается в том, что вы не присвоили значение PackageID таблицы Software.Поэтому, когда вы делаете «... s.GetSelectedIndexSoftware (PackageID)» в цикле for, вы получаете нулевое значение.В ваших операторах вставки вы не присваиваете значение PackageID.

insert into Software values('1', '1', '1', null)

должно быть

insert into Software values('1', '1', '1', n)

, где n - это значение id из столбца PackageID в таблице Package.

Если это не работает.Возможно, вы захотите сделать столбец SoftwareID в виде столбца целочисленной идентификации в таблице Software.

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