2009-07-21 20 views
1

任意のデータプロバイダからのDbConnectionを指定すると、文字列リテラルを引用するのに使用する文字を決定することができますか?また、スキーマ/テーブル/カラム名識別子の引用に必要な文字にも興味があります。Ado.netの文字列リテラルエスケープ文字を決定する

パラメータを使用してこれらの項目を指定することはオプションではありません。アプリケーションの目的は、ユーザーがSQLクエリを作成して、クエリ内の定数を持つのを助けることが一般的なシナリオであるためです。

は私がStringLiteralPatternとQuotedIdentifierPattern (http://msdn.microsoft.com/en-us/library/ms254501.aspxを参照)のような何かを得るためにDataSourceInformationスキーマコレクションを使用することができますが、唯一のに役立ちますように私は、既存の文字列にマッチし、それらを自分で作成していません。

+0

私は、標準的な手順だけで推測しているかどうか疑問を開始しました。 "文字列内の特別な文字をエスケープするための識別子と 'の文字列リテラルは、私が見てきた最も一般的な(おそらく唯一の)ケースと思われます。 – Trevor

答えて

0

デリミタ/エスケープ文字を使用するかどうかを知るために、プロバイダの種類とバージョン(DbConnectionから決定)に応じてswitch文を使用します。

1

(CNNと呼ばれる)接続を作成した後、私は、スキーマ/テーブル/列名の識別子を引用するために、以下のなかった:

'Get table and column delimiters 
Dim sTest As String = "" 
Dim sLeftDelimiter As String = "" 
Dim sRightDelimiter As String = "" 
Dim cmd As DbCommand = cnn.CreateCommand() 
Dim adapter As DbDataAdapter = factoryDB.CreateDataAdapter() 
Dim builder As DbCommandBuilder = factoryDB.CreateCommandBuilder() 
cmd.Connection = cnn 
adapter.SelectCommand = cmd 
builder.DataAdapter = adapter 
sTest = builder.QuoteIdentifier("test") 
sLeftDelimiter = sTest.Substring(0, 1) 
sRightDelimiter = sTest.Substring(5, 1) 
関連する問題