2011-01-08 3 views
0

안녕하세요. 나는 문제가있다. 나는 데이터베이스에서 패키지에 관한 정보를 얻고 그 패키지에 연결된 소프트웨어를 얻고 싶다.제약 조건을 활성화하지 못했습니다. 하나 이상의 행에 null이 아니거나 고유하거나 외부 키 제약 조건을 위반하는 값이 있습니다.

내 데이터베이스는 다음과 같다.

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) 

내가 이제 데이터베이스에있어 모두는 다음과 같습니다

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 
) 

는 내가 뭘하려고 이것이다

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) 

w 여기에 모든 소프트웨어의 널 (null)은 상당히 새로운 코딩 1

오전 업데이트되었습니다 그래서 나는 잃어버린 조금 .. 사람이 문제

------ 편집 한을 찾기 위해 나를 도울 수 hopeone --- - 이제 null을 허용하지 않도록 소프트웨어 생성을 변경하려고 시도한 다음 패키지에 아직 링크되지 않은 모든 소프트웨어가 링크 될 곳에 처음 연결되지 않은 패키지를 만듭니다. 생성시 PackageID에 1이 생성됩니다. 도움이되지 않았습니다.

------ EDIT 2 ----- 이제 소프트웨어 테이블에 외래 키가 없도록했습니다. 어느 쪽이든

답변

2

나는 소프트웨어 테이블의 PackageID에 값을 지정하지 않았기 때문에 오류가 발생하는 이유가 있다고 생각합니다. 따라서 for 루프에서 "... s.GetSelectedIndexSoftware (PackageID)"를 수행하면 null이 발생합니다. insert 문에서 PackageID에 값을 할당하지 않습니다.

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

n은 패키지 테이블의 PackageID 열로부터 ID의 값이다

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

이어야한다.

그래도 작동하지 않으면. SoftwareID 열을 Software 테이블의 정수 ID 열로 만들려고 할 수 있습니다.

+0

왜 null로 삽입합니까? 왜냐하면 소프트웨어가 만들어지면 패키지가 아직 없기 때문입니다. 사용자가 collum이 설정된 패키지에 소프트웨어를 추가하려고 할 때 처음입니다. – MrKanin

+0

그런 다음 null을 확인하도록 코드를 변경해야합니다. 예를 들면 다음과 같습니다. var softwares = s.GetSelectedIndexSoftware (PackageID); if (softwares! = null) {foreach (소프트웨어의 소프트웨어) {...}} –

+0

안녕하세요, 저는 방금 해결책을 시도했습니다. 그러나 그것은 일을 didnt한다. s.GetSelecteIndexSoftware (PackageID)의 오류 ocours처럼 보입니다. 내가 tryed 디버그, 그리고 그 packageID 내가 매개 변수로 사용할 때 유효한 하나입니다. 그리고 나는 데이터베이스에서 그것을 알고있다 – MrKanin

관련 문제