2017-02-03 1 views
1

과 충돌합니다. 여기 내 표입니다. 광고, soyad 및 전자 메일을 업데이트 할 수 있지만 전화를 업데이트하려고 할 때 외부 키 [userFk]와 충돌합니다. 이미 캐스케이드에 외래 키가 업데이트되어 있습니다. 여기에서 문제를 파악할 수 없습니다. 사전에 감사합니다.업데이트 문이 외부 키

CREATE TABLE [dbo].[ogrenci] (
[ogrenciNo] INT   NOT NULL, 
[ad]   NVARCHAR (20) NOT NULL, 
[soyad]  NVARCHAR (20) NOT NULL, 
[email]  NVARCHAR (50) NOT NULL, 
[fakulte_no] INT   NOT NULL, 
[bolum_ad] NVARCHAR (30) NOT NULL, 
[bolum_no] INT   DEFAULT ((1)) NOT NULL, 
[telefon] NVARCHAR (50) DEFAULT ((1)) NOT NULL, 
PRIMARY KEY CLUSTERED ([ogrenciNo] ASC), 
UNIQUE NONCLUSTERED ([ogrenciNo] ASC), 
UNIQUE NONCLUSTERED ([email] ASC), 
CONSTRAINT [bolumFk] FOREIGN KEY ([bolum_no]) REFERENCES [dbo].[bolum] ([bolumNo]) ON DELETE CASCADE, 
CONSTRAINT [fakulteFk1] FOREIGN KEY ([fakulte_no]) REFERENCES [dbo].[fakulte] ([fakulteId]) ON DELETE CASCADE, 
CONSTRAINT [userFk] FOREIGN KEY ([telefon]) REFERENCES [dbo].[loginusers] ([upassword]) ON DELETE CASCADE ON UPDATE CASCADE 

);

및 두번째

,

CREATE TABLE [dbo].[loginusers] (
[username] NVARCHAR (50) NOT NULL, 
[upassword] NVARCHAR (50) NOT NULL, 
PRIMARY KEY CLUSTERED ([upassword] ASC) 

); 당신이 update cascade propertyogrencitelefon를 업데이트 할 경우 update ogrenci 쿼리에서 ,[email protected] 코드를 제거해야하므로 열이, 당신의 loginusers 테이블의 기본 키입니다

private void btnUpdate_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (txtOgrenciNo.Text.Length != 0 && txtAd.Text.Length != 0 && txtSoyad.Text.Length != 0 && txtEmail.Text.Length != 0 && txtTelefon.Text.Length != 0) 
      { 
       string query = "UPDATE ogrenci SET [email protected],[email protected],[email protected],[email protected],[email protected] WHERE [email protected]"; 
       string query1 = "UPDATE loginusers SET [email protected],[email protected] WHERE [email protected]"; 
       using (connection = new SqlConnection(connectionString)) 
       using (SqlCommand command = new SqlCommand(query, connection)) 
       using (SqlCommand cmd = new SqlCommand(query1, connection)) 
       { 
        connection.Open(); 
        command.Parameters.AddWithValue("@ogrenciNoVal", txtOgrenciNo.Text); 
        command.Parameters.AddWithValue("@adVal", txtAd.Text); 
        command.Parameters.AddWithValue("@soyadVal", txtSoyad.Text); 
        command.Parameters.AddWithValue("@emailVal", txtEmail.Text); 
        command.Parameters.AddWithValue("@telefonVal", txtTelefon.Text); 
        cmd.Parameters.AddWithValue("@emailVal", txtEmail.Text); 
        cmd.Parameters.AddWithValue("@telefonVal", txtTelefon.Text); 
        command.ExecuteNonQuery(); 
        cmd.ExecuteNonQuery(); 
        gridDoldur(); 
       } 
      } 
      else 
      { 
       MessageBox.Show("Öğrenci bilgileri boş girilemez.", "Bilgilendirme", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
+0

당신이'loginusers' 테이블에 논리적 오류가 있다고 생각합니다. 기본 키는'upassword'이고, 암호가 다른 사용자가있을 수 있습니다, 맞습니까? –

+0

loginusers 테이블에서 나는 사용자의 전화 번호를 실제로 userpassword로 만들었습니다. 그래서 모두가 서로 다른 전화 번호를 가지고 있기 때문에, 다른 사용자는 동일한 패스를 가질 수 없습니다. –

+0

알겠습니다. 나는 대답을 게시 할 것입니다. –

답변

2

upassword으로

이곳은, 업데이트 버튼입니다 이

string query = "UPDATE ogrenci SET [email protected],[email protected],[email protected],[email protected] WHERE [email protected]"; 

처럼 second query 테이블 ogrenci 너무업데이트됩니다

경고 : 일부 학생이이처럼 생각한다면 그것은 좋은하지 않습니다 - "내 비밀 번호가 내 전화 인 경우, 그래서 암호와 그/그녀의 전화 번호와 다른 학생으로 로그인을 시도하고 뭔가를 할 수 있습니다":)

편집 :

귀하의 where clause 내가 생각하는 잘못 second query,

string query1 = "UPDATE loginusers SET [email protected],[email protected] WHERE [email protected]"; 
당신이 당신의 테이블 ogrenci를 업데이트해야 즉, 결국 당신이 당신의 loginusers 행을 억제 할 수 후그것은 당신이 (업데이트하지) loginusers에 행을 삽입해야하는 문제를 해결하려면이

string query1 = "UPDATE loginusers SET [email protected],[email protected] WHERE [email protected] "; 
+0

어떤 학생이 이렇게 생각하면 좋지 않을 것입니다. "내 비밀번호가 내 전화라면 다른 사람의 전화 번호로 비밀번호를 입력하고 시도해 볼 수 있습니다. –

+0

오류 표시가 중지되었지만 전화 번호 열은 업데이트되지 않았습니다. @IkramTurgunbaev –

+0

나는 내 대답을 편집했다. –

0

로 변경해야합니다.