- - PR -
Smalldatetime型のカラムにNULLを更新
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-11-08 10:08
データセットを使ってDate型のカラムにDBNullを更新したいのですが、なかなかうまくいきません。過去記事でSystem.DBNull.Valueを使うと書いてあるのですが、型違いで怒られてしまします。プログラム歴がまだ浅いのでよろしくお願いします。
[環境] Windows 2000 Proffessional VB.Net SQL Server 2000 [例] テキストボックスの欄が無記入だった場合、もしくは記載されているのを削除した場合。DBのSmalldatetime型のカラムににNullを更新する。 -----略------------------------------ Dim du As データセット名.テーブル名Row 'データセットにデータを格納 SqlDataAdapter2.Fill(データセット名) '変更する行を取得 du = データセット名.テーブル名.FindByプライマリーキー(**********), form.キーの値 '制約のチェックを中断 du.BeginEdit() **↓問題の部分↓** '記入日が画面上で変更があった場合 *更新ボタンを押した時、フォーム呼び出し時のテキストボックスと現在のテキストボックスの中身が違う場合、更新をかける If t_WriteDay(i).Text.CompareTo(writeDay(textBoxChk(i))) <> 0 Then du.記入年月日 = t_WriteDay(i).Text //記入年月日はSmalldatetimeのカラム ↑テキストボックスに何も書かれていない場合は、NULLを更新したいです。 End If '制約のチェックを再開 du.EndEdit() 'テーブルに更新する SqlDataAdapter2.Update(データセット名.テーブル名) ------------------------------------------------ よろしくお願いします。 |
|
投稿日時: 2004-11-08 10:22
コードに日本語表記がたくさんあってイマイチ理解できないのですが。。。
普通にコードを載せられないでしょうか? |
|
投稿日時: 2004-11-08 10:32
申し訳ないです。見やすくもう一度書き直します!!
------------------------------------------- SqlDataAdapter2.Fill(G_RI_HAISI_NEWRECORD1) du = G_RI_HAISI_NEWRECORD1.廃止管理.FindBy廃止管理ID利用者ID(haisiId(textBoxChk(i)), form.riyouInfo_RiyouId_chkRslt(0)) du.BeginEdit() '記入日が画面上で変更があった場合 If t_WriteDay(i).Text.CompareTo(writeDay(textBoxChk(i))) <> 0 Then du.記入年月日 = t_WriteDay(i).Text flgUpChk = True End If du.EndEdit() SqlDataAdapter2.Update(G_RI_HAISI_NEWRECORD1.廃止管理) |
|
投稿日時: 2004-11-08 10:38
さかもとと申します。
現在エラーとなっている記述も書いていただければ。 でもベテランの方々ならこの時点で分かるかもですけど・・・(笑) まだ他の方のエラーを見て勉強している身なので。 宜しくお願いします。 |
|
投稿日時: 2004-11-08 10:48
エラーの内容ですが上記のソースコードの
du.記入年月日 = t_WriteDay(i).Text の部分で、 追加情報 : 文字列 "" から型 'Date' へのキャストが有効ではありません。 とエラーがでます。 テキストボックスに何も記入がない場合の更新なのですが、空文字のString型からdate型へ更新しようとしたのでエラーになったことまでわかりました。むりやりDate型に変換して CDate(t_WriteDay(i).Text) のように記述してみましたが、同じエラーがでてしまいます。 空文字をなんとかDBNullで更新できないでしょうか? 初心者なもんで宜しくお願いします。 |
|
投稿日時: 2004-11-08 11:15
さかもとです。
そういうことでしたか,DBnullで試した結果が駄目だったのかな?と思いまして。 if テキストボックスが空白 then du("記入年月日") = DBNull.Value end if では駄目でしたか? |
|
投稿日時: 2004-11-08 11:39
さかもと様の方法で可能だと思いますが、
そのテキストボックスに入力されるのは日付のフォーマットにそった文字列であることは 保証されているのでしょうか?本来なら値チェックをおこなうべきだと思います。 |
|
投稿日時: 2004-11-08 11:42
さかもとさん返信ありがとうございます。
教えていただいたとうりにソースを記述した結果、無事にNULLを更新することができました。 ありがとうござました。 対処したソースを一応記述しておきます。 問題の部分 [修正ロジック] '記入日が画面上で変更があった場合 If t_WriteDay(i).Text.CompareTo(writeDay(textBoxChk(i))) <> 0 Then 'テキストボックスが無記入であるかどうか If t_WriteDay(i).Text = "" Then du("記入年月日") = DBNull.Value Else du.記入年月日 = t_WriteDay(i).Text End If End if ------------------------------------------- たびたびの質問になってすみませんが、下記の違いについてわかるでしょうか? @ du("記入年月日") = DBNull.Value A du.記入年月日 = DBNull.Value さかもとさんに対処法を教えていただく前に、Aの方法で記述してみたんですが、エラー(Date型にキャストできませ)がでてしまっていたので、DBNullの使い方に戸惑っていました。 @とAの違いは何なのでしょうか? よろしくお願いします。 >burton999さんへ 特にテキストボックスの文字列に日付型の制約は入れてないのですが、なにかチェックを入れたほうがよろしいのでしょうか? [ メッセージ編集済み 編集者: オベ 編集日時 2004-11-08 11:47 ] |