에서 데이터베이스 데이터 사용 - DB NULL 결정에 대해
데이터베이스 NULL 결정에 갑자기 빠졌습니다.
C# 기사
C#의 관습으로, 취득 실패라고 하면 「null」일 것이라는 감각으로 소스 코드를 짜고 있던 나. . . ( ´ •̥ ̫ •̥ ` ) 실은 데이터베이스에 관해서는 빠진 적이 있습니다.
그것은 C# 데이터베이스의 NULL 취급은 데이터베이스 (SQL)의 세계에서 NULL은 부정 값이며, C 언어와 Java에서 말하는 "완전한 제로"를 의미하는 null과는 별개의 현실을 모르고, DB 의 NULL을 「<변수> == null」로 판정해 버렸다고 하는 것입니다.
DB의 세계에서는 NULL은 무효인 부정치를 의미하기 때문에, 지금이 되어, 과연 혼동은 할 수 없는 것이라고 반성했습니다…
환경
원래 소스 코드 상태
이번에는 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 공식
Reference
이 문제에 관하여(에서 데이터베이스 데이터 사용 - DB NULL 결정에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kazumi75kitty/items/64002467350a1ea08ab0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
listBox1.Items.Add(row[1]);
listBox2.Items.Add(row[2]);
listBox1.Items.Add(row[1]);
if (row[2] != null) {
listBox2.Items.Add(row[2]);
}
else {
listBox2.Items.Add("(未設定)");
}
데이터베이스의 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 공식
Reference
이 문제에 관하여(에서 데이터베이스 데이터 사용 - DB NULL 결정에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kazumi75kitty/items/64002467350a1ea08ab0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(에서 데이터베이스 데이터 사용 - DB NULL 결정에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kazumi75kitty/items/64002467350a1ea08ab0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)