[seasar-dotnet:945] Re: S2Dao.Net+SSCE SQL自動生成を利用したInsert時の日付型データの書式

kubo [E-MAIL ADDRESS DELETED]
2008年 10月 14日 (火) 15:47:07 JST


久保(jflute)です。

小川さん、こんにちは
このスレッドは今後のとても貴重な情報になると思います。
すばらしいフィードバックありがとうございます。

2008/10/14 Takehiro Ogawa <[E-MAIL ADDRESS DELETED]>:
> お世話になっております。
> 以前、表題の件で、S2Dao.netとSQLServerCompactEditionの連係動作
> について質問しました、「林」の同僚の小川と申します。
>
> 標記件に関しまして、幸い、Microsof様のサポートも得れましたので、
> 古レスですが結果をフィードバックいたします。
>
> 【結論】
> ・SQLServerCompactEdition(SSCE)のSP1にて動作するようになる。
> SP1以前では動作しない。SP1でなぜ対応するようになったのかは
> 不明
> (差分一覧にない→これはMSKKのご担当者様も首をひねるところ)
>
> 【想定される原因】
> ・特に明示はないがSSCEの無印では、
> INSERT INTO BOO  (dt, s1, s2) VALUES(?, ?, ?)
> のような名前なしパラメータを使用したときに、割り当てがおか
> しくなる、という事象が発生する。
> (対応しておらず、エラーにならない、というのが厄介に輪を
> かけています)
> 名前ありパラメータの場合は特に問題がない
>> SP1では「なぜか」対応するようになっている。
> ・この「なぜか」の原因についてはMS様内で追われるかもしれません
> が、とりあえずこの件は片がつきました。
>
> 当節はご助言等いただきましてありがとうございました。
>
> またなにかありましたら、よろしくお願いいたします。
>
>
>
> ----------------------------------------------
> 小川 剛弘 / Takehiro Ogawa
>
> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED]
> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of 林 秀仁
> Sent: Thursday, September 04, 2008 11:45 AM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [seasar-dotnet:928] Re:S2Dao.Net+SSCE SQL自動生成を利用したInsert時
> の日付型データの書式
>
> お世話になっております。
> 林です。
>
> 調査の続きを報告します。
>
> Insertに関して、
>>INSERT句のカラムリストと行値コンストラクタの並び順が
>>テーブル定義と一致している必要がありそう(SSCE側制約)
> と認識していましたが、これは間違いだったようです。
> カラムの並びを変更して、
> INSERT INTO BOO  (dt, s1, s2) VALUES(@0, @1, @2)構文のSQLを実行したところ、
> 正常に動作致しました。
>
> 以下のエラーメッセージが、Insert文のカラムリストがテーブル定義と一致している
> 場合には
> 出力されなかった為、誤った解釈をしてしまっていました。
>>>>>> Seasar.Framework.Exceptions.SQLRuntimeException:
>>>>>> [ESSR0071]SQLException
>>>>>> occured, because System.FormatException: @2 : 10 - 文字列は有効な
>>>>>> DateTime
>>>>>> ではありませんでした。
>
> 原因はおそらく、
> INSERT INTO BOO  (dt, s1, s2) VALUES(@0, @1, @2)
> を実行した際に、(dt, s1, s2)と対応すべきVALUESの値がズレているという事です。
> ※これなら外部SQLでのInsertが失敗しない説明もつきます。
>
> これ以上調査しても根本的な解決にまで至らないと判断(調査時間もあまり無い為)
> し、
>
> ①Insertを外部SQLとする
> ②SSCEの使用を断念する
> 等で問題を回避しようと思います。
>
> ありがとうございました。
>
> ----- Original Message -----
> From: "林 秀仁" <[E-MAIL ADDRESS DELETED]>
> To: <[E-MAIL ADDRESS DELETED]>
> Sent: Wednesday, September 03, 2008 9:34 AM
> Subject: [seasar-dotnet:927] Re:S2Dao.Net+SSCE SQL自動生成を利用したInsert時
> の日付型データの書式
>
>
>> お世話になっております。
>> 林です。
>>
>>> しかし、
>>> GetProperties()メソッドで返されるプロパティは、
>>> アルファベット順や宣言順などの特定の順序で返されるわけではありません
>>> とMSDNにあるのでカラムの順序は特定できないと思います。
>>
>> 夜分遅くまで調査、質問への回答ありがとうございます。
>> カラムの順序は特定できないのですね。
>> となると、SSCEでInsert処理を行う場合は、外部SQLにするしか
>> 手立てはなさそうですね。ありがとうございます。
>> 忘れていましたが、(5)トランザクション制御 については
>> 問題ありませんでした。
>>
>> また何かありましたら報告、質問させていただきます。
>> よろしくお願いします。
>>
>> ----- Original Message -----
>> From: "Ryo Miyagi" <[E-MAIL ADDRESS DELETED]>
>> To: <[E-MAIL ADDRESS DELETED]>
>> Sent: Wednesday, September 03, 2008 2:32 AM
>> Subject: [seasar-dotnet:926] Re:S2Dao.Net+SSCE SQL自動生成を利用したInsert
> 時の日付型データの書式
>>
>>
>>> 宮城です。
>>>
>>>> とありましたが、Insert文の生成に関して、カラムの順序は、
>>>> 何の情報を元に決定されているかご存じでしょうか?
>>>> 私共が作成したいくつかのEntityクラスでInsert処理を実行したところ、テーブ
> ル定義順にInsert文が生成されるものもあれば、そうでないものもあるといった状況
> です。
>>>
>>> 自動生成のInsertの場合、
>>> EntityクラスのGetType().GetProperties()メソッドで
>>> 取得したプロパティの配列の順番で生成していたかと思います。
>>> (ID属性等がついたプロパティがあると若干ずれるかもしれません)
>>>
>>> しかし、
>>> GetProperties()メソッドで返されるプロパティは、
>>> アルファベット順や宣言順などの特定の順序で返されるわけではありません
>>> とMSDNにあるのでカラムの順序は特定できないと思います。
>>>
>>>
>>>
>>> 2008/09/02 18:31 林 秀仁 <[E-MAIL ADDRESS DELETED]>:
>>>> お世話になっております。
>>>> 林です。
>>>>
>>>> 少し間が空きましたが、経過を報告します。
>>>>
>>>> (4)外部SQLファイルの実行
>>>> については問題なくパスいたしました。
>>>>
>>>> 問題の(3)Insertに関してですが、
>>>>>>
>>>>>> ・INSERT句のカラムリストと行値コンストラクタの並び順が
>>>>>> テーブル定義と一致している必要がありそう(SSCE側制約)
>>>>
>>>> とありましたが、Insert文の生成に関して、カラムの順序は、
>>>> 何の情報を元に決定されているかご存じでしょうか?
>>>> 私共が作成したいくつかのEntityクラスでInsert処理を実行したところ、テーブ
> ル定義順にInsert文が生成されるものもあれば、そうでないものもあるといった状況
> です。
>>>>
>>>>
>>>> ----- Original Message ----- From: "Ryo Miyagi" <[E-MAIL ADDRESS DELETED]>
>>>> To: <[E-MAIL ADDRESS DELETED]>
>>>> Sent: Friday, August 29, 2008 8:24 PM
>>>> Subject: [seasar-dotnet:924] Re:S2Dao.Net+SSCE SQL自動生成を利用した
> Insert時の日付型データの書式
>>>>
>>>>
>>>>> 宮城です。
>>>>>
>>>>>> S2の設定で日付型データの書式変換指定をできたりするものでしょうか?
>>>>>> ご存知でしたらご教授ください。
>>>>>
>>>>> S2Dao.NETのログファイルに出力されるSQL文と
>>>>> SSCEに対して発行しているSQL文は異なります。
>>>>>
>>>>> ログファイルのSQL文は、
>>>>> デバッグ時等に、SQL文をコンソールから直接実行できるように
>>>>> 日時書式を変更できるようにしています。
>>>>> 日時書式の変更は、Diconファイルに下記の設定をすることで可能です。
>>>>>  <component class="Seasar.Extension.ADO.Impl.BasicCommandFactory" >
>>>>>   <property name="SqlLogDateFormat">"yyyy/MM/dd"</property>
>>>>>   <property name="SqlLogDateTimeFormat">"yyyy/MM/dd
>>>>> HH:mm:ss.fff"</property>
>>>>>  </component>
>>>>>
>>>>> SSCEに対して発行しているSQL文では、
>>>>> System.Data.IDbDataParameterパラメータを使用して値を設定しています。
>>>>> パラメータを含むSQL文は、
>>>>> INSERT INTO BOO  (dt, s1, s2) VALUES(@0, @1, @2)
>>>>> のようになり、
>>>>> Seasar.Extension.ADO.Types.BaseValueType.BindValueメソッドで
>>>>> @パラメータに値をセットしています。
>>>>>
>>>>> 従って、SSCEのADO.NETデータプロバイダが
>>>>> SSCEのDateTime型と.NET FrameworkのSystem.DateTime型との
>>>>> 適切なマッピングを実行してくれていれば、問題ないと思います。
>>>>> ※MSDNを見る限りだと適切にマッピングしているみたいです。
>>>>>
>>>>>> Seasar.Framework.Exceptions.SQLRuntimeException:
>>>>>> [ESSR0071]SQLException
>>>>>> occured, because System.FormatException: @2 : 10 - 文字列は有効な
>>>>>> DateTime
>>>>>> ではありませんでした。
>>>>>> なお外部SQLを用いたInsertは何故か成功しました。
>>>>>
>>>>> 自動生成されたSQLと外部SQLのカラム順が異なっていれば
>>>>> 早川さんのメールにあった
>>>>>>
>>>>>> ・INSERT句のカラムリストと行値コンストラクタの並び順が
>>>>>> テーブル定義と一致している必要がありそう(SSCE側制約)
>>>>>
>>>>> の制約に引っかかっているのかもしれません。
>>>>>
>>>>>
>>>>>
>>>>> 2008/08/29 16:26 林 秀仁 <[E-MAIL ADDRESS DELETED]>:
>>>>>>
>>>>>> お世話になっております。早川です。
>>>>>> 続報です。
>>>>>>
>>>>>> (2)Deleteはパスしましたが
>>>>>> (3)Insertはパスしませんでした。
>>>>>> 日時型データの書式変換に問題があるようです。
>>>>>>
>>>>>>
>>>>>> 今回評価しているデータ型は以下の二種類です。
>>>>>> SSEEでは VARCHAR, DATETIME
>>>>>> SSCEでは NVARCHAR,DATETIMEです。
>>>>>> (SSCEではVARCHARはサポートされない為、NVARCHARで代用です)
>>>>>>
>>>>>> S2dao(?)が自動生成する INSERT文はDebug.logによると
>>>>>> INSERT INTO BOO  (dt, s1, s2) VALUES('2008-08-09 15.55.59', '10',
>>>>>> '10')
>>>>>> のように記録されています。
>>>>>>
>>>>>> SSCEに対して実行した結果の例外は
>>>>>> ----
>>>>>> Seasar.Framework.Exceptions.SQLRuntimeException:
>>>>>> [ESSR0071]SQLException
>>>>>> occured, because System.FormatException: @2 : 10 - 文字列は有効な
>>>>>> DateTime
>>>>>> ではありませんでした。
>>>>>> ----
>>>>>> が発生します。
>>>>>>
>>>>>> ※ちなみにこのSQLをSSEE相手に直接送るとデータが範囲外という例外になり
> ますが、
>>>>>> 実験プログラムにてS2を経由し、SSEEに対するINSERTは成功します。
>>>>>> 恐らくS2の中で書式変換し、実際に発行しているSQLは別物なのかなと考えて
> います。
>>>>>>
>>>>>>
>>>>>> DB固有の実装で日付型データの書式表現がまちまちというのは有りうる話だと
> 思います。
>>>>>>
>>>>>> S2の設定で日付型データの書式変換指定をできたりするものでしょうか?
>>>>>> ご存知でしたらご教授ください。
>>>>>>
>>>>>>
>>>>>> よろしくお願いします。
>>>>>>
>>>>>>>>>>>> なお外部SQLを用いたInsertは何故か成功しました。
>>>>>> 日付型データの書式変換処理が、自動生成と外部SQLで異なる経路を通ってる
> のかな?
>>>>>>
>>>>>>
>>>>>> ----- Original Message ----- From: "kubo" <[E-MAIL ADDRESS DELETED]>
>>>>>> To: <[E-MAIL ADDRESS DELETED]>
>>>>>> Sent: Friday, August 29, 2008 1:52 PM
>>>>>> Subject: [seasar-dotnet:921] Re:S2Dao.Net+SSCE の疎通中間結果報告
>>>>>>
>>>>>>
>>>>>>> 久保(jflute)です。
>>>>>>>
>>>>>>> 早川さん、こんにちは
>>>>>>>
>>>>>>> 非常に良いフィードバックありがとうございます。
>>>>>>> 貴重なメールとなりそうです。
>>>>>>> また、とりあえずながら成功して良かったです。
>>>>>>>
>>>>>>> 2008/8/29 hayakawa jiro <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>
>>>>>>>> お世話になっております。早川です。
>>>>>>>>
>>>>>>>> S2Dao.Net + SQL Server Compact Editon の組み合わせでの途中結果報告で
> す。
>>>>>>>>  途中結果報告としては「成功」です。
>>>>>>>> S2Dao.Netの機能のうちSelectに関しての疎通確認が取れました。
>>>>>>>>
>>>>>>>> (私たちの)S2Dao.Netの利用予定機能として
>>>>>>>> (1)Select
>>>>>>>> (2)Delete
>>>>>>>> (3)Insert
>>>>>>>> (4)外部SQLファイルの実行
>>>>>>>> (5)トランザクション制御
>>>>>>>> を予定しており、あと(2)~(5)の動作確認が取れれば、検討は完了です。
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> seasar-dotnet mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Ryo Miyagi
>>>>> _______________________________________________
>>>>> seasar-dotnet mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>
>>>> _______________________________________________
>>>> seasar-dotnet mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>
>>>
>>>
>>>
>>> --
>>> Ryo Miyagi
>>> _______________________________________________
>>> seasar-dotnet mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>


seasar-dotnet メーリングリストの案内