.NET(へたれな)コネタ Oracle接続で全角文字
まわりでMS-ACCESSを利用している人が多いので、ちょっとしたデータの参照にDLookupを利用したがります。そこで、ASP.NETにおいても利用できるように下記のメソッドを作ったのですが、これまた、OracleのViewの項目名にMS-ACCESSライクに日本語(それも全角カナ)等を使って利用しています。テーブルは初期設計で、英数のみですが、画面へのちょっとした表示用に項目名がグリッドなどでそのまま利用できるように日本語を使用しだしたらOracleへSQL投げるときに、いろいろ問題が発生。基本的に「""」で囲めばOKなのですが、下記のような例ではどうにもならない問題発展。引数の「expr」に対して「""」で囲んだ文字列を渡すと、SQL実行時は問題ないのですが、「orclDr.Item(expr」の部分で列名を探せないでNGです。仕方がないので次のように修正しました。
・呼び出し時には「""」で囲まない。
・cmd.CommandText = "SELECT """ & expr & """" & vbCrLf
つまりDLookUp内部で「""」の囲みを対応しました。
最初からこうしていればよかったっす。
'テーブル名と取得したい項目名&抽出条件で、項目内容をもどす Public Function DLookUp(ByVal expr As String, ByVal domain As String, ByVal criteria As String) As Object Dim dba As DbAccess = DbAccess.Instance Dim orclDr As OracleDataReader Dim cmd As New OracleCommand Try cmd.CommandText = "SELECT " & expr & vbCrLf cmd.CommandText = cmd.CommandText & "FROM " & domain & vbCrLf cmd.CommandText = cmd.CommandText & "WHERE " & criteria LoggerDebug("SqlUtility.DLookUp:SQL=" & vbCrLf & cmd.CommandText) cmd.Connection = dba.cnn dba.DbOpen() orclDr = cmd.ExecuteReader While (orclDr.Read) DLookUp = orclDr.Item(expr) Exit While End While Catch fillException As System.Exception 'エラー処理コードをここに追加します。 LoggerFatal("SqlUtility.DLookUp", fillException) Throw fillException Finally orclDr.Close() dba.DbClose() End Try End Function
DbAccessはコネクション管理用独自クラス