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

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

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

nullコードで更新したい


(過去ログ 3 を表示中)

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

■2622 / inTopicNo.1)  nullコードで更新したい
  
□投稿者/ リオブランコ 二等兵(1回)-(2006/02/22(Wed) 11:17:00)

分類:[VB.NET] 


分類:[VB.NET] 

こんにちはリオブランコと申します。
DataSetテーブルのdateTime型フィールドにNullで更新したいのですが
システムエラーとなります。Int型とVarchar型フィールドは書き込めます。

For Each row In dset1.Tables("計量器記録属性").Rows
row(0) = vbNull 'int型フィールド Ok
row(1) = vbNullChar 'Varchar型フィールド OK
    row(2) = ???????? 'DateTime型フィールド NG
Next
DbNullとか色々のConst値を書いてみましたが'DateTime型'ではないと云われて
しまいます。VB.Net2003環境です。よろしくお願いします。

0
引用返信 編集キー/
■2623 / inTopicNo.2)  Re[1]: nullコードで更新したい
□投稿者/ 魔界の仮面弁士 軍曹(61回)-(2006/02/22(Wed) 12:02:06)

分類:[VB.NET] 

# 以下、未確認のまま回答しています。(^^;

データベースでいう所の NULL の事を指しているのであれば、
「DBNull」を使ってみてください。

> row(0) = vbNull 'int型フィールド Ok
これは、
 row(0) = 1
と同義だと思います。

vbNull は、VarType関数の戻り値として使われる値であり、
VarType(System.DBNull.Value) は vbNull を返します。


> row(1) = vbNullChar 'Varchar型フィールド OK
これは、
 row(1) = Chr(0)
の意味になりますね。

格納はできるかも知れませんが、「NULL」や「空文字列」とは
別の意味となるように思います。


>     row(2) = ???????? 'DateTime型フィールド NG
DBNull.Value で。

0
引用返信 編集キー/
■2624 / inTopicNo.3)  Re[2]: nullコードで更新したい
□投稿者/ リオブランコ 二等兵(2回)-(2006/02/22(Wed) 13:24:06)

分類:[VB.NET] 

魔界の仮面弁士さん、有難うございました。
仰せの通り、SQL2000サーバを覗くと"1"とかChr(0)が書かれております。
それでもエラーに成らないだけマシでした。

DateTime型フィールド にどう記述するか、この何日間は頭を抱えておりました。
VB6が染み付いてしまっているせいか、DBNull.Value にたどり着けなっかたです。
魔界さんは他のサイトでも参考にさせていただいています。
私にとっては仏界の仮面弁士か天界の仮面弁士さんです。
重ねて有難うございました。 以上

解決済み
引用返信 編集キー/
■2625 / inTopicNo.4)  Re[1]: nullコードで更新したい
□投稿者/ trapemiya 伍長(44回)-(2006/02/22(Wed) 13:30:21)
trapemiya さんの Web サイト

分類:[VB.NET] 

データテーブルのDateTime型にNullをセットすることはできません。DateTime型は構造体であり、値型であるからです。DateTime.MinValueなどでごまかすぐらいでしょうか?

0
引用返信 編集キー/
■2626 / inTopicNo.5)  Re[2]: nullコードで更新したい
□投稿者/ 魔界の仮面弁士 軍曹(62回)-(2006/02/22(Wed) 14:27:02)

分類:[VB.NET] 

# こういう時って、解決チェックを付けて回答するのと、外して回答するのと、
# どっちがよいのだろう……? とりあえず、解決チェックは外して投稿します。


> データテーブルのDateTime型にNullをセットすることはできません。

誤解を招きそうな表現に思えたので、多少追記。

Sytem.DateTime 型の変数に、System.DBNull.Value を代入する事はできません。
(VB.NETではなく、JScript.NETならば代入できるけど)

SQL Server の datetime フィールドにnull値をセットする事は可能です。
たとえば、こんな感じ。

========================
 '型指定されていないデータセット
 For Each row As DataRow In dset1.Tables(0).Rows
  'これは問題なし
  row(2) = System.DBNull.Value
 Next


 '型指定されたデータセット
 For Each row As DataSet1.計量器記録属性Row In dset1.計量器記録属性

  'これはNG。『型 'System.DBNull' の値を 'Date' に変換できません。』
  'row.DateTime型フィールド = System.DBNull.Value

  'これはOK。
  row.SetDateTime型フィールドNull()

  'これもOK
  'row(2) = System.DBNull.Value
 Next

0
引用返信 編集キー/
■2629 / inTopicNo.6)  Re[3]: nullコードで更新したい
□投稿者/ リオブランコ 二等兵(3回)-(2006/02/22(Wed) 15:06:12)

分類:[VB.NET] 

魔界の仮面弁士のご指導の如くコーディングを行い、確認しました。
SQL2000サーバに全てNullが書き込まれています。
For Each row In dset1.Tables("計量器記録属性").Rows
row(0) = DBNull.Value 'int型フィールド Ok
row(1) = DBNull.Value 'Varchar型フィールド OK
  row(2) = DBNull.Value 'DateTime型フィールド OK
Next

SQL Sever Enterprise ManagerのCntrl+0のキー操作で'DateTime型フィールドでも
Nullが書けるのでコードで書けない訳がないと思っていました。
DBNullは定数だとばかり考えていて、DBNullクラスとは知りませんでした。
あらためて有難うございました。解決とさせて頂きます。以上




解決済み
引用返信 編集キー/
■2630 / inTopicNo.7)  Re[3]: nullコードで更新したい
□投稿者/ trapemiya 伍長(45回)-(2006/02/22(Wed) 15:06:47)
trapemiya さんの Web サイト

分類:[VB.NET] 

フォローありがとうございます。
データベースにnullを格納したい場合は、データテーブルにはDBNullをセットしなければならないところがポイントですね。

#たしか、String型のカラムにnullをセットしても、実際にはDBNullが格納されていたと思う・・・

0
引用返信 編集キー/
■2631 / inTopicNo.8)  Re[4]: nullコードで更新したい
□投稿者/ 魔界の仮面弁士 軍曹(63回)-(2006/02/22(Wed) 16:07:43)

分類:[VB.NET] 

# リオブランコさんが[解決]をつけて投稿した後、それをtrapemiyaさんが
# 解除しているかのように見えてしまうのは気のせいだろうか。(^^;


> #たしか、String型のカラムにnullをセットしても、

えぇと、それは何の話でしょうか? (もしかしてC#?)

VB.NET の話だとしたら、DBNull や Nothing や String.Empty はあっても、
null というキーワードは無いかと思いますよ。

あるいは SQL Server の話だとしたら、String型 のカラムという表現ではなく、
varchar や char のカラムという表現になるでしょうし。
(JET ならば、Stringという型名もサポートしているけど)


> 実際にはDBNullが格納されていたと思う・・・

先ほどの例でいえば

  row("Varchar型フィールド") = ""
  row("Varchar型フィールド") = String.Empty

  row.Varchar型フィールド = ""
  row.Varchar型フィールド = String.Empty

などは、『長さゼロの文字列』の代入を意味しますし、

  row("Varchar型フィールド") = Nothing
  row("Varchar型フィールド") = DBNull.Value

  row.Varchar型フィールド = Nothing
  row.SetVarchar型フィールドNull()

などであれば、『null値』の代入を意味しますね。

0
引用返信 編集キー/
■2632 / inTopicNo.9)  Re[5]: nullコードで更新したい
□投稿者/ trapemiya 伍長(46回)-(2006/02/22(Wed) 17:07:01)
trapemiya さんの Web サイト

分類:[VB.NET] 

2006/02/22(Wed) 17:08:19 編集(投稿者)

># リオブランコさんが[解決]をつけて投稿した後、それをtrapemiyaさんが
># 解除しているかのように見えてしまうのは気のせいだろうか。(^^;

おぉ、すみません。解除してるつもりはありませんでした。
単に忘れてただけです。(^^;
というか35秒差で気づかなかったということもあります。orz

>えぇと、それは何の話でしょうか? (もしかしてC#?)

あ〜、そうです。m(_ _)m

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -