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

林 秀仁 [E-MAIL ADDRESS DELETED]
2008年 9月 2日 (火) 18:31:03 JST


お世話になっております。
林です。

少し間が空きましたが、経過を報告します。

(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 メーリングリストの案内