2017-01-29 1 views
1

외래 키인 열을 업데이트하려고하는데 "NULL"값으로 설정하려고하지만 오류에 "ERROR 1452 : 자식 행 :. 외래 키 제약 조건이 실패 "UPDATE 쿼리를 사용하여 UPDATE 외래 키

try 
{ 
    con.Open(); 
    MySqlCommand cmd = new MySqlCommand(
       "UPDATE tblcdsummary 
        set PersonalInfoID = '" + DBNull.Value.ToString() + 
        "' WHERE CDID = '" + looplabel2.Text + "'", con); 


    cmd.ExecuteNonQuery(); 
    con.Close(); 
} 
catch (Exception x) 
{ 
    MessageBox.Show(x.Message); 
} 
+1

** 경고 ** : 원시 문자열을 쿼리에 삽입하지 마십시오. ** 항상 ** [제대로 탈출] (http://bobby-tables.com/csharp) 모든 사용자 데이터 또는 당신은 끔찍한 [SQL 주입 버그] (http://bobby-tables.com/)를 만들 것입니다. . – tadman

답변

2

당신이 결과 무엇인지 아십니까 (즉, 테이블이 키를 사용하여 reffered.) DBNull.Value.ToString()?
빈 문자열입니다. 즉, 이러한 두 테이블간에 관계가 있으면 빈 문자열을 기반으로 두 번째 테이블의 레코드에 업데이트 된 레코드를 연결하려고합니다.
물론 관련 테이블에 기본 키가 빈 문자열로 설정된 레코드가없는 경우 업데이트가 실패합니다.

당신이 PersonalInfoID 열

PS에 저장 될 NULL 허용하는 경우

MySqlCommand cmd = new MySqlCommand(
      @"UPDATE tblcdsummary 
       set PersonalInfoID = NULL 
       WHERE CDID = @id", con); 
cmd.Parameters.Add("@id", MySqlDbType.VarChar).Value = looplabel2.Text; 

은 물론 이것은 단지 작동 null을 명시 적으로 (따옴표를)를 쓸 해당 필드를 설정하십시오. 매개 변수화 된 쿼리를 사용하도록 코드를 변경했습니다. 이것은 SQL 명령 텍스트를 작성하는 유일한 올바른 방법입니다.
문자열을 연결하지 마십시오. 정말 큰 오류입니다 (Sql Injection 검색)

+1

이것은 실제로 도움이됩니다. 정말 고마워요. 작은 공과에 감사드립니다. 메모 :) – Ekko

2

당신은 실제 테이블이 키의 첫 번째 업데이트 값이 필요

+0

당신은 기본 키를 참조해야하는 위치로 업데이트해야한다는 것을 의미합니까? – Ekko

+0

예 Reffered 테이블 의 기본 키를 업데이트해야합니다. 외래 키에 부여한 값이 reffered 테이블의 기본 키에 존재하는지 확인됩니다. – Yuva

관련 문제