2009-07-21 3 views
1

Étant donné une DbConnection de n'importe quel fournisseur de données, est-il possible de déterminer le ou les caractères utilisés pour citer un littéral de chaîne et d'échapper tous les caractères spéciaux dans la chaîne? Je m'intéresse également aux caractères nécessaires pour citer les identifiants de schéma/table/nom de colonne. L'utilisation de paramètres pour spécifier ces éléments n'est pas une option car l'intention de mon application est d'aider les utilisateurs à créer une requête SQL et d'avoir des constantes dans la requête est un scénario courant.Déterminez les caractères d'échappement littéraux de chaîne dans Ado.net

je peux utiliser la collection de schémas DataSourceInformation pour obtenir quelque chose comme StringLiteralPattern et QuotedIdentifierPattern (voir http://msdn.microsoft.com/en-us/library/ms254501.aspx), mais qui ne me permettent de faire correspondre les chaînes existantes et ne pas les créer moi-même.

+0

J'ai commencé à me demander si la procédure standard est juste à deviner. "pour les identificateurs et" pour les littéraux de chaînes avec \ pour échapper des caractères spéciaux dans la chaîne semble être le cas le plus commun (et peut-être seulement) que j'ai vu.J'inquiète juste de passer à travers un pilote inconnu qui est différent. – Trevor

Répondre

0

J'utilise une instruction switch en fonction du type de fournisseur et de la version (déterminée à partir de DbConnection) afin de connaître les délimiteurs/caractères d'échappement à utiliser.

1

Après avoir créé la connexion (appelée cnn), je ne les éléments suivants pour citer les identificateurs de nom schéma/tableau/colonne:

'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) 
Questions connexes