C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

c#DBnull の判定

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■97736 / inTopicNo.1)  c#DBnull の判定
  
□投稿者/ c# (3回)-(2021/07/07(Wed) 11:15:46)

分類:[.NET 全般] 

C#でDBに接続してログイン認証を行っています。DBに入力された値がないときにエラー文”このidは存在しない”と表示したいのですが、null判定のコードの書き方がわかりません。よろしくお願いします。
while (dataReader.Read())
{
if ((int)dataReader[0] == ID)
{
a = true;


if ((string)dataReader[8] == PW)
{
b = true;
break;
}
}
if (DBNull.Value.Equals((int)dataReader[0]))
{
errorms.Text = "IDが存在しません";
if (DBNull.Value.Equals((string)dataReader[8]))
{
errorms1.Text = "パスワードが存在しません";
}
}
}
このように書いてみましたが、反応しませんでした。
引用返信 編集キー/
■97737 / inTopicNo.2)  Re[1]: c#DBnull の判定
□投稿者/ WebSurfer (2284回)-(2021/07/07(Wed) 11:22:31)
No97736 (c# さん) に返信

http://bbs.wankuma.com/index.cgi?mode=al2&namber=97726 と基本的には同じ質問ですよね?

そのスレッドで回答をもらっているのに、なぜフィードバック一つしないのですか?

一般常識に照らしてのマナー的にどうなのか考えてみませんか?
引用返信 編集キー/
■97738 / inTopicNo.3)  Re[2]: c#DBnull の判定
□投稿者/ c# (4回)-(2021/07/07(Wed) 11:33:52)
No97737 (WebSurfer さん) に返信
> ■No97736 (c# さん) に返信
>
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=97726 と基本的には同じ質問ですよね?
>
> そのスレッドで回答をもらっているのに、なぜフィードバック一つしないのですか?
>
> 一般常識に照らしてのマナー的にどうなのか考えてみませんか?
同じではないです。前回のはDBに値があれば、通過してしまう旨相談しましたが、今回は入力した値がDBになかった場合の処理のしかたについてお聞きしています
引用返信 編集キー/
■97739 / inTopicNo.4)  Re[3]: c#DBnull の判定
□投稿者/ 魔界の仮面弁士 (3148回)-(2021/07/07(Wed) 11:40:21)
No97736 (c# さん) に返信
> C#でDBに接続してログイン認証を行っています。
何故最初から where で絞り込まないのでしょうか?


> null判定のコードの書き方がわかりません。
if (dataReader.IsDBNull(0))
if (dataReader.IsDBNull(8))

// int id = dataReader.GetInt(0);
// string pw = dataReader.GetString(8);


> DBに入力された値がないときにエラー文”このidは存在しない”と表示したいのですが
「該当データが登録されていない」という事と
「null 値が登録されている」事は異なります。

例えば住所録テーブルから携帯電話の番号を調べようとした場合
 (1) 住所録テーブルに、その人を指すレコードが存在しない
 (2) 該当レコードはあったが、携帯番号欄が null であった(電話番号が不明という意味)
 (3) 該当レコードはあったが、携帯番号欄が空文字列であった(携帯を持っていないという意味)
 (4) 該当レコードがあり、携帯番号を示す文字列が保持されている
という 4 つの状態がありえます。これらはすべて別の状態です。


最初に提示頂いたコードで言えば、
> if ((int)dataReader[0] == ID)
> {
>  a = true;
のような処理が行われているようなので、
 ・while ループ前に a = false; にしておく
 ・ID を見つけたら a = true; に書き換え
 ・while ループ完了後も a == false なら、“このidは存在しない”とする
という手順になるでしょう。

実際には「bool a = false;」という一文字変数だと意図が分かりにくいので、
「bool found = false;」や「bool hasID = false;」などの方が良さそうですが。
引用返信 編集キー/
■97740 / inTopicNo.5)  Re[3]: c#DBnull の判定
□投稿者/ WebSurfer (2285回)-(2021/07/07(Wed) 12:59:45)
No97738 (c# さん) に返信
> ■No97737 (WebSurfer さん) に返信
>>■No97736 (c# さん) に返信
>>
>>http://bbs.wankuma.com/index.cgi?mode=al2&namber=97726 と基本的には同じ質問ですよね?
>>
>>そのスレッドで回答をもらっているのに、なぜフィードバック一つしないのですか?
>>
>>一般常識に照らしてのマナー的にどうなのか考えてみませんか?
> 同じではないです。前回のはDBに値があれば、通過してしまう旨相談しましたが、今回は入力した値がDBになかった場合の処理のしかたについてお聞きしています

そのスレッドで回答をもらっているのに、なぜフィードバック一つしないのですか?

こういうことには反応するけど、回答に反応が無いというのはどういう訳? 回答者に失礼でしょ
引用返信 編集キー/
■97742 / inTopicNo.6)  Re[4]: c#DBnull の判定
□投稿者/ c# (6回)-(2021/07/07(Wed) 14:30:04)
No97739 (魔界の仮面弁士 さん) に返信
> ■No97736 (c# さん) に返信
>>C#でDBに接続してログイン認証を行っています。
> 何故最初から where で絞り込まないのでしょうか?
>
>
>>null判定のコードの書き方がわかりません。
> if (dataReader.IsDBNull(0))
> if (dataReader.IsDBNull(8))
>
> // int id = dataReader.GetInt(0);
> // string pw = dataReader.GetString(8);
>
>
>>DBに入力された値がないときにエラー文”このidは存在しない”と表示したいのですが
> 「該当データが登録されていない」という事と
> 「null 値が登録されている」事は異なります。
>
> 例えば住所録テーブルから携帯電話の番号を調べようとした場合
>  (1) 住所録テーブルに、その人を指すレコードが存在しない
>  (2) 該当レコードはあったが、携帯番号欄が null であった(電話番号が不明という意味)
>  (3) 該当レコードはあったが、携帯番号欄が空文字列であった(携帯を持っていないという意味)
>  (4) 該当レコードがあり、携帯番号を示す文字列が保持されている
> という 4 つの状態がありえます。これらはすべて別の状態です。
>
>
> 最初に提示頂いたコードで言えば、
>>if ((int)dataReader[0] == ID)
>>{
>> a = true;
> のような処理が行われているようなので、
>  ・while ループ前に a = false; にしておく
>  ・ID を見つけたら a = true; に書き換え
>  ・while ループ完了後も a == false なら、“このidは存在しない”とする
> という手順になるでしょう。
>
> 実際には「bool a = false;」という一文字変数だと意図が分かりにくいので、
> 「bool found = false;」や「bool hasID = false;」などの方が良さそうですが。

分かりやすく教えていただきありがとうございました。
勉強になりました
引用返信 編集キー/
■97746 / inTopicNo.7)  Re[4]: c#DBnull の判定
□投稿者/ c# (9回)-(2021/07/07(Wed) 14:51:32)
No97740 (WebSurfer さん) に返信
> ■No97738 (c# さん) に返信
>>■No97737 (WebSurfer さん) に返信
> >>■No97736 (c# さん) に返信
> >>
> >>http://bbs.wankuma.com/index.cgi?mode=al2&namber=97726 と基本的には同じ質問ですよね?
> >>
> >>そのスレッドで回答をもらっているのに、なぜフィードバック一つしないのですか?
> >>
> >>一般常識に照らしてのマナー的にどうなのか考えてみませんか?
>>同じではないです。前回のはDBに値があれば、通過してしまう旨相談しましたが、今回は入力した値がDBになかった場合の処理のしかたについてお聞きしています
>
> そのスレッドで回答をもらっているのに、なぜフィードバック一つしないのですか?
>
> こういうことには反応するけど、回答に反応が無いというのはどういう訳? 回答者に失礼でしょ
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ