에서 데이터베이스 데이터 사용 - DB NULL 결정에 대해

데이터베이스 NULL 결정에 갑자기 빠졌습니다.



C# 기사


  • C#에서 MySQL 사용 - 1. 개발 환경 설치
  • C#에서 MySQL 사용 - 2.SELECT · 화면 표시
  • C#에서 MySQL 사용 - 3. 추가 업데이트 및 삭제
  • C#에서 데이터베이스의 데이터가 NULL인지 여부 결정 [이 문서]
  • C #의 delegate (대리자)와 => (람다 식)은 C 언어의 함수에 대한 포인터와 유사한 취급
  • 동적으로 컨트롤 추가 - 1. 버튼 클릭
  • 동적으로 컨트롤 추가 - 2. 텍스트 상자 찾아보기

  • C#의 관습으로, 취득 실패라고 하면 「null」일 것이라는 감각으로 소스 코드를 짜고 있던 나. . . ( ´ •̥ ̫ •̥ ` ) 실은 데이터베이스에 관해서는 빠진 적이 있습니다.

    그것은 C# 데이터베이스의 NULL 취급은 데이터베이스 (SQL)의 세계에서 NULL은 부정 값이며, C 언어와 Java에서 말하는 "완전한 제로"를 의미하는 null과는 별개의 현실을 모르고, DB 의 NULL을 「<변수> == null」로 판정해 버렸다고 하는 것입니다.

    DB의 세계에서는 NULL은 무효인 부정치를 의미하기 때문에, 지금이 되어, 과연 혼동은 할 수 없는 것이라고 반성했습니다…

    환경


  • OS: Windows 10 Pro
  • 개발 환경: Visual Studio 2019
  • 데이터베이스: MySQL 5.7

  • 원래 소스 코드 상태



    이번에는 MySQL을 C #에 도입했을 때
    의 프로그램을 짜 보았습니다만, 실제의 데이터는 이하와 같이 되어 있습니다.


    id
    이름
    memo


    1
    테스트용
    Only for testing.

    2
    π
    3.14159265358797323...

    4
    3.14
    NULL

    6
    매우 어려운
    Difficult Testing

    7
    어려운
    테스트

    8
    √5
    2.2360679 ...


    실제로는, memo의 일부에는 NULL가 포함되어 있기 (위해)때문에, 이하의 코드에서는, 실행하면 공백으로 표시되어 버렸습니다.
    listBox1.Items.Add(row[1]);
    listBox2.Items.Add(row[2]);
    

    「== null」에서는 NULL의 판정을 할 수 없었다



    그래서, 취득한 memo는 row[2]에 해당하므로 「row[2] == null」 「row[2] != null」로, NULL인가 어떤가의 판정을 했습니다만…
    listBox1.Items.Add(row[1]);
    if (row[2] != null) {
        listBox2.Items.Add(row[2]);
    }
    else {
        listBox2.Items.Add("(未設定)");
    }
    

    잘 비교되지 않았습니다 ( ´•̥ ̫ •̥`)



    올바른 DB NULL 결정



    데이터베이스의 NULL은 부정값입니다.



    최근에는 DB의 NULL에 대해 이해를 깊게 해 왔지만, 데이터베이스의 세계에서는 NULL은 부정치를 의미하는 것이며, C 언어나 Java와 같이, 완전 무효인 제로를 의미하는 것은 아니다고 하는 것 그래서 C 언어로 DB의 NULL에 대해 말하면 초기화되지 않은 변수 같은 것으로 불안정한 값을 포함하는 것에 가까운 것 같다.

    그렇게 되면, DB의 NULL을 「==」 「!=」연산자로 비교하려고 해도, 당연히 잘 되지 않는 것일지도. . .

    올바른 비교 방법



    라고 하는 것으로, 올바른 비교로서는, DBNull.Value라고 하는 것이 준비되어 있으므로, 그 값과 같으면, 취득한 데이터는 NULL라고 하는 것을 판별할 수 있다
    listBox1.Items.Add(row[1]);
    if (!row[2].Equals(DBNull.Value)) {
        listBox2.Items.Add(row[2]);
    }
    else {
        listBox2.Items.Add("(未設定)");
    }
    



    이것으로 NULL의 경우의 비교가 생겼다(♥´꒳`*)

    참고문헌



    1. [C#]DataRow의 값이 Null인지 확인하는 방법
    2. DBNull.Value 필드 - Microsoft .NET 공식

    좋은 웹페이지 즐겨찾기