timestamp列をnullにしてInsert文を実行するには?@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。11:44>4)DataAdapterのUpdateメソッドでDB更新アダプタではなく直接SqlCommandで実行したらどうなります?(SqlConnectionTestはアダプタで使用しているSqlConnectionオブジェクトに差し替えてください。Onlineを読んだことで理解したつもりです。引用:nullを放り込んだはずなのに、null以外の値が入っていることを、なぜ「おかしい」と思わずに、『ちゃんと入っているのではないか』と考えられたのでしょう?私はDataSetを使っている場合にはAutoIncrementになっている列でも同じ発想をするときがあるのですが、DBが勝手に挿入してくれるので「あえてnullを入れて、または空のまま」にすることがあります。※単にデザイナで作ったSqlCommandとDataSetを編集するのが面倒というだけなのですが。ゆうじゅんさんに示して頂いたコードですが、問題なく実行されました。勝手な想像ですが、DataSetから値を取得するときに今回の問題があるように感じます。「今回の」問題があるのではないかとわかってきました。「今回の」としたのは、Jittaさんにご指摘いただいているとおり、timestamp列をnullにしてInsertをかけるような使われ方は想定外なのではないかと思ってきたからです。13:11>ゆうじゅんさんに示して頂いたコードですが、問題なく実行されました。:勝手な想像ですが、DataSetから値を取得するときに今回の問題があるように感じます。「今回の」問題があるのではないかとわかってきました。timestampにユーザが値を設定できる/できないが「問題」なのではなく、「なぜ、他のツールでは“通る”ことがDataSetでは“通らない”のか」という「疑問」ですね???DataSetからテーブルを抜き出して、そのテーブルの該当カラムのReadOnlyプロパティを見てみてください。13:48Kazさん、Jittaさん、いろいろお骨折りいただきながらも紛らわしい内容でまことに申し訳ありません。お二人が言われているように他の手段ではNullを送ってもちゃんとtimestamp列に値が入るのになんでDataSetを使ったときだけ、これができないのか?という疑問です。引用:Jittaさんの書き込みDataSetからテーブルを抜き出して、そのテーブルの該当カラムのReadOnlyプロパティを見てみてください。Trueになっていませんか?該当カラムのReadOnlyプロパティは「true」になっていました。該当カラムには「何もデータを入れない」「Set<Column名>Nullメソッドを使用」の両方の場合でDataAdapterのUpdateメソッドを呼びましたが症状は同じでした。:該当カラムのReadOnlyプロパティは「true」になっていました。該当カラムには「何もデータを入れない」「Set<Column名>Nullメソッドを使用」の両方の場合でDataAdapterのUpdateメソッドを呼びましたが症状は同じでした。あ、いや、Falseにしたからといって、設定できるようになるわけではありません。これは「データベース側の設定」を引き継いでいると思います。引き継ぐ?設定にあわせる、かな?ちなみに、AllowDBNullはfalseになっていませんか?まぁ、「データベースで設定できない値を設定しようとしていることを知らせてくれる」と考えましょうよ。Integer」を追加したとします。null)と、間違って書いたとすると、他のツールの方は通ってしまいます。データを読み出す段になって「間違っている」ことに気がつくわけですが、「読み込み」を間違えたのか、「書き込み」を間違えたのか、そこから調べなければなりません。書き込むときにエラーになっていれば、少なくとも「後から間違いに気づく」より、格段に少ない工数で修正ができます。いうことだと思います。14:33いろいろありがとうございます。>ちなみに、AllowDBNullはfalseになっていませんか?これはTrueに設定されていました。例がなんで通ってしまうのか?というのが実はよくわからないのですが、timestamp列は必ずテーブルの最後にくるということですか?>まぁ、「データベースで設定できない値を設定しようとしていることを知らせてくれる」と考えましょうよ。これについては反論の余地もないどころかまさにそのとおりだと思ってます。DataSetはメモリ上に展開されたデータベースだと思っているので、DBにできない(またはやらないほうがいい)ことをすべきではないのはごもっともです。素直にInsert/Update文を書き直すのがセオリーでそうするべきなんでしょうね。15:16>今回の一件はそもそも、デザイナでDataAdapterから作成されるSqlCommand達を編集せずにこの1文が最初の質問に入っていれば、誤解が少なくてすんだかもしれませんね。たしかに、自動化して楽できるところは極力したいものです。ちなにみtimestamp列を含んだ更新ロジックを生成する機能は、CommandBuilderでもデータアダプタ構成ウィザードでもサポートされていないようです。(プログラミングADO.NETという書籍より)ここにもそれとなくtimestamp型はカスタムコマンドを作成する必要があると書かれていますね。残念なり;;http://support.microsoft.com/default.aspx?scid=kb;ja;313483#これUpdateの話でした。Reserved.著作権はアイティメディア株式会社またはその記事の筆者に属します。当サイトに掲載されている記事や画像などの無断転載を禁止します。