2009-07-21 2 views
1

При любом DbConnection от любого поставщика данных можно определить символ или символы, используемые для цитирования строкового литерала, а также избежать каких-либо специальных символов внутри строки? Меня также интересуют символы, необходимые для цитирования идентификаторов схем/таблиц/столбцов.Определить символьные escape-символы строки в Ado.net

Использование параметров для указания этих вещей не является вариантом, так как целью моего приложения является помощь пользователям в создании SQL-запроса и наличие констант в запросе - общий сценарий.

я могу использовать коллекцию схем DataSourceInformation, чтобы получить что-то вроде StringLiteralPattern и QuotedIdentifierPattern (см http://msdn.microsoft.com/en-us/library/ms254501.aspx), но это только помогает мне соответствовать существующим строкам, а не создавать их сами.

+0

Я начал задаваться вопросом, если стандартная процедура просто угадать. «для идентификаторов и« для строковых литералов с \, чтобы избежать особых символов в строке, кажется, является наиболее распространенным (и, возможно, единственным) случаем, который я видел. Я просто беспокоюсь о том, чтобы переместиться через какой-то неизвестный драйвер, который отличается. – Trevor

ответ

0

Я использую оператор switch в зависимости от типа и версии поставщика (как определено в DbConnection), чтобы узнать, какие разделители/escape-символы использовать.

1

После создания соединения (так называемый ORT), я сделал следующее за кавычки идентификаторы имен схемы/таблицы/столбцы:

'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) 
Смежные вопросы