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

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

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

Re[2]: データセットでのNull取得について


(過去ログ 41 を表示中)

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

■21463 / inTopicNo.1)  データセットでのNull取得について
  
□投稿者/ たく (7回)-(2008/07/02(Wed) 18:34:31)

分類:[.NET 全般] 

質問がありますので、どうかよろしくお願いします。

現象ですが、NVL関数を使用してDBにあるNullの値を半角スペースに置き換えているのですが
なぜかNullになってしまっています。環境はVB.NET2005 + Oracle10gです。

作業方法ですが、
1.新しい項目の追加からデータセットを選択。
2.データ接続。目的のテーブルを登録。
3.以下のようなコードを作成し、データを取得しています。
接続部分は省略しています。
-----------------------------------------------------------------------------------
Imports System.Data.OracleClient

Dim conn As OracleConnection
Dim cmd As OracleCommand
Dim adapter As OracleDataAdapter
Dim dataTable As DataSet1.テーブルDataTable

conn = オラクルコネクション
cmd = conn.CreateCommand()
cmd.CommandText = " SELECT ID, NVL(NAME, ' ') FROM テーブル WHERE ID = :ID"
cmd.Parameters.AddWithValue(":ID", "1")
adapter = New OracleDataAdapter(cmd)
dataTable = New DataSet1.テーブルDataTable
adapter.Fill(dataTable)
----------------------------------------------------------------------------------

ここで、列:NAMEが半角スペースになりません。
SQL*PLUSなどでは半角スペースが取得できていますが、この方法では値がNULLになってしまいます。
DBの値がNULLだと、この方法では必ずNULLになってしまうのでしょうか?
NULLの場合、Is列名Nullのプロパティで判断は出来ますが、これしか方法は無いのでしょうか?



引用返信 編集キー/
■21465 / inTopicNo.2)  Re[1]: データセットでのNull取得について
□投稿者/ やじゅ (471回)-(2008/07/02(Wed) 18:39:47)
やじゅ さんの Web サイト
No21463 (たく さん) に返信
> 質問がありますので、どうかよろしくお願いします。
>
> 現象ですが、NVL関数を使用してDBにあるNullの値を半角スペースに置き換えているのですが
> なぜかNullになってしまっています。環境はVB.NET2005 + Oracle10gです。
>

そんなことは無いと思いますが、どのように確認されたのでしょうか?

引用返信 編集キー/
■21466 / inTopicNo.3)  Re[2]: データセットでのNull取得について
□投稿者/ たく (8回)-(2008/07/02(Wed) 19:02:54)
返信、ありがとうございます。

確認方法ですが、
dataTable.Item(0).NAMEの値を取得したところ、DBNullが返ってきてしまいます。
う〜ん・・・
引用返信 編集キー/
■21469 / inTopicNo.4)  Re[3]: データセットでのNull取得について
□投稿者/ やじゅ (472回)-(2008/07/02(Wed) 19:18:31)
やじゅ さんの Web サイト
No21466 (たく さん) に返信
> 返信、ありがとうございます。
>
> 確認方法ですが、
> dataTable.Item(0).NAMEの値を取得したところ、DBNullが返ってきてしまいます。
> う〜ん・・・

試しにDataSet1.テーブルDataTableを使わないでやってみたらどうでしょうか?

Dim dataTable As DataSet1.テーブルDataTable
dataTable = New DataSet1.テーブルDataTable
adapter.Fill(dataTable)

Dim dataTable As DataTable
'コメントアウト dataTable = New DataSet1.テーブルDataTable
adapter.Fill(dataTable)
引用返信 編集キー/
■21470 / inTopicNo.5)  Re[1]: データセットでのNull取得について
□投稿者/ Jitta on the way (123回)-(2008/07/02(Wed) 19:23:17)
No21463 (たく さん) に返信
> dataTable = New DataSet1.テーブルDataTable

これは、型付きデータセットを作っています?そっちの設定で何かしていませんか?
引用返信 編集キー/
■21492 / inTopicNo.6)  Re[2]: データセットでのNull取得について
□投稿者/ たく (9回)-(2008/07/03(Thu) 11:44:11)
>やじゅさん
>試しにDataSet1.テーブルDataTableを使わないでやってみたらどうでしょうか?

使わない場合は、取得することが出来ました。

>Jitta on the wayさん
型付きデータセットというのでしょうか?たぶんそうだと思いますが・・・
プロパティを見ていますが、どれを設定していいのか調べてみます。今のところ、出来ませんが。。
しばらくはIs列名Nullで乗り切りたいと思います。
引用返信 編集キー/
■21493 / inTopicNo.7)  Re[1]: データセットでのNull取得について
□投稿者/ シャノン (520回)-(2008/07/03(Thu) 11:48:18)
No21463 (たく さん) に返信
> 質問がありますので、どうかよろしくお願いします。
>
> 現象ですが、NVL関数を使用してDBにあるNullの値を半角スペースに置き換えているのですが
> なぜかNullになってしまっています。環境はVB.NET2005 + Oracle10gです。
>
> 作業方法ですが、
> 1.新しい項目の追加からデータセットを選択。
> 2.データ接続。目的のテーブルを登録。
> 3.以下のようなコードを作成し、データを取得しています。
> 接続部分は省略しています。
> -----------------------------------------------------------------------------------
> Imports System.Data.OracleClient
>
> Dim conn As OracleConnection
> Dim cmd As OracleCommand
> Dim adapter As OracleDataAdapter
> Dim dataTable As DataSet1.テーブルDataTable
>
> conn = オラクルコネクション
> cmd = conn.CreateCommand()
> cmd.CommandText = " SELECT ID, NVL(NAME, ' ') FROM テーブル WHERE ID = :ID"
> cmd.Parameters.AddWithValue(":ID", "1")
> adapter = New OracleDataAdapter(cmd)
> dataTable = New DataSet1.テーブルDataTable
> adapter.Fill(dataTable)
> ----------------------------------------------------------------------------------
>
> ここで、列:NAMEが半角スペースになりません。
> SQL*PLUSなどでは半角スペースが取得できていますが、この方法では値がNULLになってしまいます。
> DBの値がNULLだと、この方法では必ずNULLになってしまうのでしょうか?
> NULLの場合、Is列名Nullのプロパティで判断は出来ますが、これしか方法は無いのでしょうか?

NVL後の列名に別名が必要なのでは?
cmd.CommandText = " SELECT ID, NVL(NAME, ' ') NAME FROM テーブル WHERE ID = :ID"
ではどうでしょうか?
引用返信 編集キー/
■21508 / inTopicNo.8)  Re[2]: データセットでのNull取得について
□投稿者/ たく (10回)-(2008/07/03(Thu) 14:41:53)
ありがとうございます。
別名を使ったら取得することが出来ました。

ただ、結構微妙な感じではありますね・・・
別名を使ってしまうとプロパティが出てこないため、列名を指定して値をとっています。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -