2017-02-03 2 views
1

Вот мои таблицы, я могу обновлять объявление, сояд и электронную почту, но когда я пытаюсь обновить телефон, он конфликтует с внешним ключом [userFk], у меня уже есть обновление внешнего ключа на каскаде, поэтому i не может решить проблему здесь. ЗаблаговременноОператор обновления конфликтует с внешним ключом

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) 

);

и вот кнопка обновления,

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» primarykey является «upassword», могут быть разные пользователи с одинаковым паролем, верно? –

+0

ну в таблице loginusers я сделал номер телефона пользователей на самом деле userpassword, так как у всех есть разные номера телефонов, ни один пользователь не может иметь один и тот же пропуск. –

+0

Хорошо, я напишу ответ –

ответ

2

Как upassword колонка PrimaryKey в вашем loginusers столе, если вы хотите обновить telefon на ogrenci с update cascade property, так что вам нужно удалить ,[email protected] код из update ogrenci запроса, как этот

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

Ваш second query будет обновлять таблицу ogrenci тоже

ВНИМАНИЕ: Это не хорошо, если какой-то студент будет думать, как это - «Если мой пароль мой телефон, так что давайте попробуем логин в качестве еще одного студента с его/ее телефонный номер в качестве пароля и сделать что-то» :)

EDIT:

Ваш second querywhere clause неправильно, я думаю,

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

Это должно измениться на этой

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

Нехорошо, если какой-то студент будет думать так: «Если мой пароль - мой телефон, так что попробуйте войти в систему как другой студент со своим номером телефона в качестве пароля и сделать что-нибудь», –

+0

он остановил показ ошибки, но все еще не обновил телефонную колонку. @IkramTurgunbaev –

+0

Я отредактировал свой ответ, посмотрю –

0

Для решения проблемы вам нужно вставить строку в loginusers (не обновляется) после того, что вам необходимо обновить таблицу Öğrenci, в конце концов, вы можете подавить loginusers строку.

Смежные вопросы