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

Ryo Miyagi [E-MAIL ADDRESS DELETED]
2008年 9月 3日 (水) 02:32:37 JST


宮城です。

> とありましたが、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 メーリングリストの案内