- PR -

DBにNULLが入っている場合の処理方法

投稿者投稿内容
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2006-11-28 10:57
お世話になります。

DBのあるテーブル(基テーブルとします)からnvarchar型のデータを拾ってきて、その文字列を基にしてファイルのパスを生成し、そのファイル名の有無によって条件分岐させ、そのファイルパスをさらに加工して別のテーブルに格納する、ということをやろうとしています。

ここで問題がでてきたのですが、基テーブルからデータを引っ張るときに、その基テーブルの中にあるデータがnullだった場合に、GetString(0)などで引っ張ろうとしても、

「データが Null です。このメソッド、またはプロパティは Null 値で呼び出せません。」

というエラーがでてきます。それならと思い、次のような条件文を作りました。1列目にnullが入っているとすると、

if (File.Exists("http://192.168.0.1/test/" + sqlReader.GetString(0) + ".txt"))

とか、

if (sqlReader.GetString(0) != null)

といった感じでいくつか作ってみましたが、これでもやっぱりGetStringのところでnullを呼び出せないと言われ、とまってしまいます。

そこで質問ですが、GetStringに似たような感じでDBにnullが入っていても引っ張り出して変数に格納できる方法や、もしくは引っ張り出さなくても条件文で使えるような方法はありませんでしょうか?

ご回答よろしくお願いいたします。

_________________
◇◇◇ 社内SEを兼務する文系プログラマです。
◇◇◇ WinXP VisualStudio2005(C#メイン) MS・SQLServer とかを使っています。
◇◇◇ 周囲にプログラマがいないので、みなさんだけが頼りですヽ(`Д´;ノ
未記入X
大ベテラン
会議室デビュー日: 2005/05/19
投稿数: 136
投稿日時: 2006-11-28 11:03
こんにちは。
念のため確認です。

NZ関数についてはご存知ですよね?

#タイトルだけ見て反応してしまいましたorz

--以下追記
NZはAccess(jet)でしたね。
SQLServerならISNULL関数でした。失礼しました。

[ メッセージ編集済み 編集者: 未記入 編集日時 2006-11-28 11:45 ]
HIRO
大ベテラン
会議室デビュー日: 2002/06/21
投稿数: 109
投稿日時: 2006-11-28 11:05
引用:

Wingardさんの書き込み (2006-11-28 10:57) より:

if (sqlReader.GetString(0) != null)


いくつか考えられますが

string strHoge;
if ( sqlReader.GetValue(0) != null )
strHoge = sqlreader.GetString(0);
else
strHoge = "";

はどうでしょうか?



_________________
--------------------------------------------
HIRO's.NET VB.NETとC#のTipsを掲載しています

[ メッセージ編集済み 編集者: HIRO 編集日時 2006-11-28 11:21 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-11-28 11:11
DBNull ?
http://msdn2.microsoft.com/ja-jp/library/system.dbnull(VS.80).aspx
_________________
かるあ のメモスニペット
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-11-28 11:13
Null値を扱いたいなら、2003以前ならSystem.Data.SqlTypesのクラスを使う。2005以降ならNullable Typesを使う。普通の変数にはNull値を格納できないので、「Null 値で呼び出せません」となる。
eternia
常連さん
会議室デビュー日: 2006/02/23
投稿数: 42
投稿日時: 2006-11-28 11:23
テーブルからデータを取得する時点でISNULL関数を使う方法もあります。
#MSSQL=SQLServerですよね?
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2006-11-28 11:44
みなさんご回答ありがとうございます。
確かめるのにお時間がかかりそうですので、
全て検証してから、再度返答させていただきたいと思います。


_________________
◇◇◇ 社内SEを兼務する文系プログラマです。
◇◇◇ WinXP VisualStudio2005(C#メイン) MS・SQLServer とかを使っています。
◇◇◇ 周囲にプログラマがいないので、みなさんだけが頼りですヽ(`Д´;ノ
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-11-28 12:55
引用:

Wingardさんの書き込み (2006-11-28 10:57) より:
if (sqlReader.GetString(0) != null)



こうでしょうね。

コード:


if (sqlReader.IsDBNull(0))



【追記】
DB が何か明記されていないので、クライアント側で判定する方法を。


[ メッセージ編集済み 編集者: きくちゃん 編集日時 2006-11-28 13:05 ]

スキルアップ/キャリアアップ(JOB@IT)