[seasar-dotnet:1576] Re: DBの日本語表記でのエラー について

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2010年 3月 9日 (火) 09:49:06 JST


久保様

お世話になります。大塚です。
返信が遅くなり申し訳ありません。

結果から申しますと、更新処理、登録処理は成功いたしました。
以下、詳細です。

久保様がおっしゃられたようにEntityのテーブル属性の値を
ダブルコーテーションで囲むことで成功いたしました。

成功方法
<Table("""T_ユーザーマスタ""")> _

私が最初に試していたのは

<Table(""T_ユーザーマスタ"")> _

としていたのですが、これではVB側のコンパイルエラーが出てしまい、
実行すらできない状態にあって悩んでおりました。
できるとの返信をいただき、再度検討しなおし、実行してみたところうまくできました。
ありがとうございました。

ちなみに今回の件についてはテーブル名のみの対応で大丈夫のようです。
フィールド名に長音記号が入っていた場合であっても、
特に登録、更新処理に問題はありませんでした。
(フィールド名 例:ユーザー名)

ちなみに、ADO.NET直接利用の場合についてですが、これはうまくいきました。
ただし、この場合でも長音記号を使用している日本語のテーブル名、フィールド名
についてはダブルコーテーションで囲む必要があります。
また、ODPのバージョンですが、「ODP.NET 2.0 11.1.0.7.20」にて実行いたしましたが、
結果としては最初に記載した方法(ダブルコーテーションで囲む)を行わない限り、
エラーとなってしまいます。

今回はシノニム経由にての確認まで至りませんでしたが、ビューでエラーと
なっている経緯がありますので、難しかったかもしれません。

以上、報告をさせていただきました。
このたびはありがとうございました。
今後ともよろしくお願いいたします。

大塚

>久保(jflute)です。
>
>"とにかくクォートすれば実行できる" と仮定しての話ですが、
>
>DBFlute経由のS2Daoにおいてですが、
>Entityのテーブル属性の値をクォートして、
>登録・更新処理共に正常に動作しました。
>(ログの表示用SQLでテーブル名がクォートされている)
>
>S2Daoを拡張しているので全く同じとは言えませんが、
>テーブル属性の値をクォートするというのは
>試す価値はありそうです。
>
>>>><4>
>>>>シノニムを作って、シノニム経由で実行できるかどうか
>>>>お試し下さい。もし、それで実行できるなら回避方法の
>>>>一つになるかと思います。(後はビューもですね)
>>> ビューを使用して行いましたが、実行できませんでした。
>>> (「T_ユーザーマスタ」を「V_USER」にして実行)
>> なるほど、そうですか。
>> 引き続き、シノニムのお願いします。(ダメそうだなぁ...)
>参照先をクォートしたビューや、参照先をクォートしたシノニムも
>試してみて下さい。(select * from "T_ユーザーマスタ" とか)
>
>2010/3/8 kubo <[E-MAIL ADDRESS DELETED]>:
>> 久保(jflute)です。
>>
>>>><1>
>>> 検索はテーブル名をダブルコーテーションで囲むことで動作しています。
>> 了解しました。
>>
>>>><2>
>>>>S2経由じゃないやり方で、検索・更新ができますでしょうか?
>>>>SQLツール(SQL*Plus)、そして、ADO.NET直接利用の場合。
>>> 検索・更新処理ともに問題なくできます。
>>> ちなみにツールは「Object Browser for Oracle Ver.11.0.0.0」を使用しています。
>> これはダブルコーテーションを囲ったら実行できたということでしょうか?
>> (それともObject Browserが気を利かせて内部的に囲ってるとか!?)
>> 引き続き、ADO.NET直接利用をお願いします。
>>
>>>><4>
>>>>シノニムを作って、シノニム経由で実行できるかどうか
>>>>お試し下さい。もし、それで実行できるなら回避方法の
>>>>一つになるかと思います。(後はビューもですね)
>>> ビューを使用して行いましたが、実行できませんでした。
>>> (「T_ユーザーマスタ」を「V_USER」にして実行)
>> なるほど、そうですか。
>> 引き続き、シノニムのお願いします。(ダメそうだなぁ...)
>>
>>
>> とにかくダブルクォーテーションで囲うことで回避ができるなら、
>> 登録も更新も外だしSQLで回避することができるかと思います。
>> (もちろん、テーブル数が多いとかなり面倒ですが...)
>>
>> もしくは、テーブル属性の値にダブルクォーテーション入りの
>> テーブル名を入れることで回避できるかもしれません。
>> (すいませんが試していませんので単なる推測です)
>> 昔Java版のS2Daoでそういう話があって
>> 対応してたようなしてないような...
>>
>>
>> 2010/3/8 〓<[E-MAIL ADDRESS DELETED]>:
>>> 久保様
>>>
>>> お世話になります。大塚です。
>>> 下記について回答いたします。
>>> 取り急ぎ、現在確認できる範囲を記載いたしました。
>>>
>>>><1>
>>>>発生するのは、更新処理だけでしょうか?
>>>>(検索や登録はうまく動作しますか?)
>>> 検索はテーブル名をダブルコーテーションで囲むことで動作しています。
>>> (SQL例:SELECT * FROM "T_ユーザーマスタ")
>>> ダブルコーテーションで囲まないと、データがうまく取得できなかったためです。
>>> (最初のメールで記載しておらず、すいません)
>>>
>>> また、登録処理については更新時と同じエラーとなり実行できませんでした。
>>>
>>>><2>
>>>>S2経由じゃないやり方で、検索・更新ができますでしょうか?
>>>>SQLツール(SQL*Plus)、そして、ADO.NET直接利用の場合。
>>>
>>> 検索・更新処理ともに問題なくできます。
>>> ちなみにツールは「Object Browser for Oracle Ver.11.0.0.0」を使用しています。
>>>
>>>><3>
>>>>ODPのバージョンって最新でしょうか?
>>>>もし、最新じゃないなら最新でお試し下さい。
>>> 現在、すぐに確認できる状態にできませんので、確認後、改めて返信したく思います。
>>>
>>>><4>
>>>>シノニムを作って、シノニム経由で実行できるかどうか
>>>>お試し下さい。もし、それで実行できるなら回避方法の
>>>>一つになるかと思います。(後はビューもですね)
>>> ビューを使用して行いましたが、実行できませんでした。
>>> (「T_ユーザーマスタ」を「V_USER」にして実行)
>>>
>>> その時のエラーも
>>> [EDAO0009]V_USERDto
>>> Seasar.Dao.PrimaryKeyNotFoundRuntimeException' の初回例外が Seasar.dll で発生しました。
>>> となっておりました。
>>>
>>> シノニム経由については未確認ですので、これも改めて確認後、返信したいと思います。
>>>
>>> 以上、よろしくお願いいたします。
>>>
>>> 大塚
>>>
>>>
>>>>久保(jflute)です。
>>>>
>>>>ありがとうございます。
>>>>http://otn.oracle.co.jp/forum/message.jspa?messageID=35021426
>>>>
>>>>などを見ると、単にPKのメタデータ取得だけの問題じゃなさそうですね。
>>>>(PKのメタデータだけの問題ならDBFlute使って回避できるかなと
>>>>思ったのですが、多分すぐ次の処理で同じくエラーになるのかも...)
>>>>
>>>><1>
>>>>発生するのは、更新処理だけでしょうか?
>>>>(検索や登録はうまく動作しますか?)
>>>>
>>>><2>
>>>>S2経由じゃないやり方で、検索・更新ができますでしょうか?
>>>>SQLツール(SQL*Plus)、そして、ADO.NET直接利用の場合。
>>>>
>>>><3>
>>>>ODPのバージョンって最新でしょうか?
>>>>もし、最新じゃないなら最新でお試し下さい。
>>>>
>>>><4>
>>>>シノニムを作って、シノニム経由で実行できるかどうか
>>>>お試し下さい。もし、それで実行できるなら回避方法の
>>>>一つになるかと思います。(後はビューもですね)
>>>>
>>>>2010/3/8 〓<[E-MAIL ADDRESS DELETED]>:
>>>>> 久保様
>>>>>
>>>>> お世話になります。
>>>>> 返信ありがとうございます。
>>>>>
>>>>> 下記項目に対して記載いたします。
>>>>>
>>>>>>すいません、取り急ぎ環境の確認ですが、
>>>>>>"S2Dao.NETを利用している"
>>>>>>でよろしいでしょうか?
>>>>>
>>>>> S2Dao.NETを利用しております。
>>>>>
>>>>>>あと、OracleのDataProviderの種類と
>>>>>>バージョンも提示して頂けると助かります。
>>>>>
>>>>> OracleのDataProviderの種類は
>>>>> 「ODP for .NET 2.0 10.2.0.2.20」
>>>>> を使用しています。
>>>>>
>>>>> 以上です。
>>>>> よろしくお願いいたします。
>>>>>
>>>>> 大塚
>>>>>
>>>>>
>>>>>>久保(jflute)です。
>>>>>>
>>>>>>大塚さん、こんにちは
>>>>>>
>>>>>>> OS:WindowsXP
>>>>>>> VisualStudio2008 VB.NET
>>>>>>> Oracle 11g(OS:Windows2008)
>>>>>>> S2Container.NET 1.3.17
>>>>>>すいません、取り急ぎ環境の確認ですが、
>>>>>>"S2Dao.NETを利用している"
>>>>>>でよろしいでしょうか?
>>>>>>あと、OracleのDataProviderの種類と
>>>>>>バージョンも提示して頂けると助かります。
>>>>>>(メタデータ取得するところでエラーになっているようなので)
>>>>>>
>>>>>>2010/3/8 〓<[E-MAIL ADDRESS DELETED]>:
>>>>>>> お世話になっております。
>>>>>>> 大塚と申します。
>>>>>>>
>>>>>>> 現在、下記開発環境にて開発を行っております。
>>>>>>> OS:WindowsXP
>>>>>>> VisualStudio2008 VB.NET
>>>>>>> Oracle 11g(OS:Windows2008)
>>>>>>> S2Container.NET 1.3.17
>>>>>>>
>>>>>>>
>>>>>>> DBのテーブル名、フィールド名とも日本語を使用しております。
>>>>>>> そこでテーブル名に長音記号が入っているテーブルについて更新処理の際に
>>>>>>> 下記のエラーが出てしまい、更新できません。
>>>>>>>
>>>>>>> エラーが起こるテーブル名の例:T_ユーザーマスタ
>>>>>>> エラー内容:[EDAO0009]T_ユーザーマスタDto
>>>>>>> Seasar.Dao.PrimaryKeyNotFoundRuntimeException' の初回例外が Seasar.dll で発生しました。
>>>>>>>
>>>>>>> 日本語であってもテーブル名に長音記号が入っていない場合は更新処理が成功します。
>>>>>>> 成功するテーブル名の例:会社マスタ
>>>>>>>
>>>>>>> ちなみにフィールド名に長音記号が入っている場合は問題なく、更新処理は行われます。
>>>>>>>
>>>>>>> 過去のソフトのリプレイスのためできる限りテーブル名、フィールド名を変更しないようにと
>>>>>>> 考えております。
>>>>>>>
>>>>>>> テーブル名を変更せずに更新できる方法はあるのでしょうか?
>>>>>>>
>>>>>>> お忙しい中、申し訳ありませんが、よろしくお願いいたします。
>>>>>>>
>>>>>>> 大塚
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> 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 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 メーリングリストの案内