- PR -

DataGridでNULLが表示されない

1
投稿者投稿内容
TAKADON
会議室デビュー日: 2004/11/19
投稿数: 6
投稿日時: 2004-11-19 18:12
はじめまして TAKADONと申します
開発環境 Windows2000SERVER + VB.NET + Sqlserver 2000でWEBアプリケーションを
作っています。開発経験は1ヶ月です

DataGridを使用して検索結果を表示させたいのですが
データアダプタのデータのプレビュでは正しい検索結果なのですが
DataGrid上だと同じように表示されません。
DataGrid消して作り直したり
してみたりしたのですが結果が変わりません
データソースとしてストアドを使っています
住所の部分はNULLがOKなカラムです。
よろしくお願いいたします。

データプレビュー(正しいデータ)
No NAME 住所
1  AA  XX県
2  BB  (NULL)
3  CC ZZ県
4  DD  (NULL)
5  EE  YY県

DATAGRIDで表示されるデータ
No NAME 住所
1  AA  XX県
3  CC ZZ県
5  EE  YY県



Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-23 10:52
諸農です。

DBサーバーから取得したDataSet/DataTableをどのような方法で
DataGridにセットしていますか?
また、DataViewなどを利用して表示条件を指定していたりしていませんか?

再現できる最小限のコードを提示してもらうことは可能ですか?


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
TAKADON
会議室デビュー日: 2004/11/19
投稿数: 6
投稿日時: 2004-11-24 10:27
返信ありがとうございます
データセットの方法については
データアダプタでストアドを指定して使用しています
ストアドについては(usp_datasearch)

引数 varchar @s_name 検索する名前
引数 varchar @s_jyusyo 検索する住所
SQL文 varchar @strSQL

SET @strSQL = 'SELECT TOP 100 PERCENT NO,NAME,住所 FROM 住所録'
IF @s_name IS NOT NULL
BEGIN
SET @strSQL = @strSQL + ' AND ' + 'NAME LIKE' + '''' + '%' + @s_name + '%' +''''
END
IF @s_jyusyo IS NOT NULL
BEGIN
SET @strSQL = @strSQL+' AND ' + 'NAME LIKE' + '''' + '%' + @s_jyusyo + '%' +''''
END
EXEC (strSQL)
という感じです
DATASETの方法については
データアダプタ datasearch_dap

datasearch_dap.Selectcommand.parameters("@s_name").value = Me.s_name_txt
datasearch_dap.Selectcommand.parameters("@s_jyusyo").value = Me.s_jyusyo_txt
datasearch_dap.Fill(dataset1,"usp_data_search")
DataGrid1.databind()
というような感じで記述しています。

DataAdapterのSelect文をストアドを使わず条件もなしで全件表示するSelect文にするとNullも表示されます。

このSelect文になる前に一度Select文の条件設定を間違えてDatasetを作ってしまったのですがその間違ったSelect文がDataset上に残っており正しいSelect文が適用されない(更新されていない)等の現象の可能性はあるのでしょうか

よろしくお願いいたします。
TAKADON
会議室デビュー日: 2004/11/19
投稿数: 6
投稿日時: 2004-11-24 10:29
上記DataGridのFillの部分でストアド名を打ち間違えました
正しくは "usp_datasearch"です。
すみませんでした
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-24 11:02
諸農です。

引用:

DataAdapterのSelect文をストアドを使わず条件もなしで全件表示するSelect文にするとNullも表示されます。



であれば、ストアドを使わない時(NULL含むレコード表示も可能な時)の取得件数と、ストアドを使った時の取得件数を比較して、ストアドで取得した件数が少ないのであれば、少なくなった分がNULL含むレコードかどうかの確認をして、そうであればストアドの見直しをしてみるのがいいのではないでしょうか。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-24 11:40
お答えが出てないようなので、検証できないけど、書きますね。

うまくいったというSQLを書いてもらえるとありがたいです。


SQLServer2000用語集
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_ea-ez_4aur.asp
によると、
-----
NULL (NULL)
値を明示的に代入していないエントリ。NULL は 0 やブランクとは違います。NULL 値は、ほかの値が NULL 値の場合も含めて、ほかの値よりも大きいか、小さいか、等しいかを調べることはできません。
-----
とのことですので、Likeもだめなのかもしれません。

Transact-SQL リファレンス LIKE
http://www.microsoft.com/japan/msdn/library/ja/tsqlref/ts_la-lz_115x.asp

_________________
たつごろー
codeseek
こみゅぷらす
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-11-24 12:36
パラメータに NULL ではなく、空文字列を設定しているからではないでしょうか。
SP 側で
コード:
IF @s_xxx <> ''

にするか、
呼び側で
コード:
IF s_xxx_txt <> "" THEN
  .parameters("@s_xxx").value = s_xxx_txt
ELSE
  .parameters("@s_xxx").value = DBNull.Value
END IF

にするかでいいんじゃないでしょうか。
TAKADON
会議室デビュー日: 2004/11/19
投稿数: 6
投稿日時: 2004-11-24 17:25
Jubeiさん たつごろーさん にしざきさん本当にありがとうございました。
にしざきさんの言われたとおりコードを呼ぶ際 DBNULL.valueを設定することで
解決いたしました。
皆様ありがとうございました。
1

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