- PR -

ODP.NETについて教えてください。

1
投稿者投稿内容
Mr.CB
会議室デビュー日: 2004/05/13
投稿数: 17
投稿日時: 2004-05-14 14:49
前にあったスレッドで同じような事で困っています。
同じ内容のスレッドを作成して申し訳ありません。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11491&forum=7&5
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5170&forum=7&8

初めてVB.NET+ODP.NETを使用してOracleへのアクセスにチャレンジしています。
簡単なPGを作成しており、ボタンを押したらDataGridにデータを表示させると
いう内容です。

質問(1)
前スレッドでは「日本語列名を2重引用符でくくる」と記述されておりますが、
下記のようなロジックの場合、日本語列名を2重引用符でくくることが出来ず
困っております。

とりあえず、私の環境で2重引用符でくくらなくても実行することができました
が、前スレッドでも謳われているように「日本語列名を2重引用符でくくる」こ
とを守っていこうと考えています。

下記ロジックの場合、どの様な対処法があるでしょうか?

質問(2)
下記のロジックにおいて、列名を色々なパターンを指定して試してみますと、列名が
半角カタカナ文字のみで構成されている場合に、「ORA-00936:式がありません。」と
いうエラーが発生しました。(列名の一部に半角カタカナ文字が入っている場合は大丈
夫でした。)

.NETへ移項する際に、新しいテーブル構造は、既存のものと変更したくないのですが、既存のテーブル構造ですと、半角カタカタ文字のみの列名が存在することになってし
まいます。

何か良い対処法は無いでしょうか?

質問(1)(2)とも初歩的なことで大変申し訳ありませんが、どなたかご教授して
いただけないでしょうか?
宜しくお願い致します。m(__)m


以下、ボタンを押したときに実行されるロジックです。

Try

 Dim strCon As String = "User Id=ユーザID;password=パスワード;Data Source=データソース名;"
 Dim strCmd As String = "SELECT パスワード FROM tableA"

Dim adapter As New OracleDataAdapter(strCmd, strCon)
Dim ds As New DataSet
Adapter.Fill(ds, "tableA")

DataGrid1.SetDataBinding(ds, "tableA")

Catch ex As OracleException
MessageBox.Show(ex.Message)
End Try
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-05-14 15:10
こんにちは。

同じく「初めてVB.NET+ODP.NETを使用してOracleへのアクセスにチャレンジ」
しているものですが、分かる範囲でお答えします。

引用:

質問(1)
前スレッドでは「日本語列名を2重引用符でくくる」と記述されておりますが、
下記のようなロジックの場合、日本語列名を2重引用符でくくることが出来ず
困っております。

Dim strCmd As String = "SELECT パスワード FROM tableA"


VB.NETで2重引用符を文字列に含める場合は2つ重ねてください。
この場合は以下のようになります。

Dim strCmd As String = "SELECT ""パスワード"" FROM tableA"

引用:

質問(2)
下記のロジックにおいて、列名を色々なパターンを指定して試してみますと、列名が
半角カタカナ文字のみで構成されている場合に、「ORA-00936:式がありません。」と
いうエラーが発生しました。(列名の一部に半角カタカナ文字が入っている場合は大丈
夫でした。)


日本語の列名を使用する場合は「必ず」2重引用符で囲まなければなりません。
囲まなくても動いているのは「たまたま動いてる」だけで、一切保証されません。

また、2重引用符で囲った場合でも Oracle DataBase での動作が保証されるだけで、
それ以外のツールやミドルウェアでの動作が保証されているわけではないようです。

ODP.NETは2重引用符で囲めば保証されるのかどうかについては、申し訳ありませんが
私も知りませんので、分かる方がいたら情報をお願いします。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-05-14 15:24
Mr.CBさん、こんにちは。

引用:

下記のようなロジックの場合、日本語列名を2重引用符でくくることが出来ず
困っております。


出来ないというのは何故なのか、随分悩みましたが、ひょっとして、
Dim strCmd As String = "SELECT "パスワード" FROM tableA"
と記述した時点でコンパイラに怒られる、という事ですか?
もしそうなら、MSDNライブラリの「Visual Basic 言語の仕様」-「2.4.4 文字列リテラル」を調べて下さい。

【追記】
カブってしまいました。


[ メッセージ編集済み 編集者: きくちゃん 編集日時 2004-05-14 15:26 ]
Mr.CB
会議室デビュー日: 2004/05/13
投稿数: 17
投稿日時: 2004-05-14 15:46
Ten.さん、きくちゃんさん、早速のご返答有難うございます。m(__)m

MSDNライブラリで確認しました。
「文字列中で二重引用符文字を 2 つ続けると、文字列内の二重引用符を表します。」
ということですね。本当に初歩的な質問をしてしまい申し訳ありませんでした。

確かに、Dim strCmd As String = "SELECT ""パスワード"" FROM tableA" で成功出来ました。

最後に確認なのですが、日本語のテーブル名を使用する場合も、列名と同様に2重引用符
で囲まないとだめなんでしょうか?

宜しくお願い致します。

Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-05-14 15:57
テーブル名についても同じく2重引用符で囲まなければなりません。

列名をテーブル名で修飾する場合は、以下のようになるので注意しましょう。

SELECT "ユーザマスタ"."パスワード" FROM "ユーザマスタ"

テーブル名:ユーザマスタ
列名:パスワード

それではお互いにがんばりましょう!
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-14 16:01
引用:

Mr.CBさんの書き込み (2004-05-14 15:46) より:

最後に確認なのですが、日本語のテーブル名を使用する場合も、列名と同様に2重引用符
で囲まないとだめなんでしょうか?


 列名、テーブル名だけでなく、関数名や制約名など、「オブジェクト名」にAN文字と一部の記号以外を用いる場合は、必ず囲みます。が、“安全な”文字だけを使うように心がけるべきです(1バイト文字圏のソフトウェアですから)。
Mr.CB
会議室デビュー日: 2004/05/13
投稿数: 17
投稿日時: 2004-05-14 16:46
Ten.さん、Jittaさん、ご返答有難うございます。m(__)m

色々とご教授して頂きありがとうございます。
今後とも宜しくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)