- - PR -
timestamp列をnullにしてInsert文を実行するには?
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-03-29 15:31
もう大反省というところです。 皆さんには貴重なお時間を割いてまでお付き合い頂いているのに申し訳なく思います。 noderaさんに示して頂いたページや「プログラミング ADO.NET」を参考に どんな風にしているのか理解し、その方法を用いようと思います。 | ||||
|
投稿日時: 2004-03-29 15:49
こっちで試してみましたが「timestamp型にはDBNull以外の値を設定できません」
のエラーが発生しました。 このエラーはそちらでも発生しました? どうもエラー内容をみるとDataAdapter.Update以外で発生してるっぱいのですが もしお手数でなければDataAdapter.Updateをはずしてどうなるか見ていただけないでしょうか | ||||
|
投稿日時: 2004-03-29 16:05
上記のエラーですが、timestampの列に「null」を代入すると起こりました。 何も入れなかった場合には「DBNullのため取得できません」となります。 DataAdapter.Updateをはずしてというのは、コメントにして実行しないということでよろしいですか? その場合には上記のようなエラーはなにもでませんでした。 ちなみに、nullを入れた場合にはDataSetのtimestamp列のSetプロパティで例外がでて それ以外の場合には同じプロパティのGetの方で例外がでてました。 | ||||
|
投稿日時: 2004-03-29 18:03
noderaさんに教えて頂いたサイトや書籍を引っ掻き回していろいろ眺めてみたのですが、
同時実行制御などをカスタム制御したい場合にtimestamp列を使って云々という記述は 両方で見つけることができましたが、ここにあることは今回のこととは関係なさそうでした。 今回は単純にデザイナが作ったComanndそのままにDataSetを使ってUpdateメソッドを呼ぶときに(実際にはInsert文が実行される)なんでtimestamp列を空白やnullにして実行できないのか? ということなので、同時実行制御や再読み込みはあまり関係なさそうでした。 わざわざ示していただいたのに申し訳ありません。 | ||||
|
投稿日時: 2004-03-29 20:11
回答があさってな方向を向いていたようで、申し訳ありませんでした。
とりあえず自分もこの話題興味があったのでいろいろ試してみましたが、同じようにDataSetにTimestamp型を含んだまま自動生成したコマンドでは動作させることができませんでした。 そもそも、クエリーアナライザーでも(3番目のフィールドがtimestamp型と仮定) Insert TimestampTable values(1, '名前', NULL) のような構文はOKですが、 declare @nullvalue timestamp set @nullvalue = null Insert TimestampTable values(1, '名前', @nullvalue) はNGです。 DataAdapterのUpdateを走らせたときに、SQLプロファイラで見ると同じようにvarbinary(8)の変数にNULLを突っ込んで実行しようとしています。 例) exec sp_executesql N'INSERT INTO TimestampTable(code, name, tmstmp) VALUES (@code, @name, @tmstmp); SELECT code, name, tmstmp FROM TimestampTable WHERE (code = @code)', N'@code int,@name varchar(50),@tmstmp varbinary(8)', @code = 1, @name = 'ABC', @tmstmp = NULL 結果的には、上のNG構文と同じになるので、そもそもSQLサーバー自体がtimestamp型へ変数値での代入を認めていないようです。 となると、この場合「Commandを編集せずに」というのは無理かもしれませんね。 [ メッセージ編集済み 編集者: nodera 編集日時 2004-03-29 20:14 ] | ||||
|
投稿日時: 2004-03-30 11:35
いろいろ調べていただき、結論としてこのようなことまで導き出していただきまして本当にありがとうございます。 ADO.NETというよりはSQL Serverの仕様によってこのような問題がおき、解決するためには素直に「Commandを編集」するということがわかり、これからの機会に大いに役に立つと思います。 |
«前のページへ
1|2|3