2017-02-03 12 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 

));

2つ目、

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

)。ここ

とは、更新ボタンで、あなたはupdate cascade propertyogrencitelefonを更新したい場合は

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として列には、あなたのloginusersテーブルに主キーであるので、あなたがupdate ogrenciクエリから,[email protected]コードを削除する必要がありますこの

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

のようにあなたのsecond queryテーブルogrenciすぎを更新します

WARNING:一部の学生がこのように考えます場合、それはよくないでしょう - 「私のパスワードは私の電話がある場合は、そのパスワードとして彼/彼女の電話番号を持つ別の学生としてログインを試してみて、何かをすることができます」:)

EDIT:

あなたsecond querywhere clauseが、私は考えて

string query1 = "UPDATE loginusers SET [email protected],[email protected] WHERE [email protected]"; 
間違っていますあなたは、テーブルogrenciを更新する必要があり、その後それはあなたの問題を解決するには、この

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

学生がこのように思うなら、それは良くありません - "私のパスワードが私の電話なら、あなたの電話番号をパスワードとして他の生徒とログインして何かをやりましょう" –

+0

エラーが表示されなくなりましたが、テレフォン列は更新されませんでした。 @IkramTurgunbaev –

+0

私は自分の答えを編集しました –

0

に変更する必要がありますが、最後に、あなたのloginusers行を抑制することができる、(更新しない)loginusersであなたの行を挿入する必要があります。

関連する問題