2013-07-22 1 views
0

Первая у меня есть CString (MFC)Как добавить обработчик функции форматирования из CString

CString csSQL 

Когда формат SQL-строки, например

csSQL.Format(szFormat, szTableName, szColumn, szValue, intValue) 

мне нужно обрабатывать специальный символ в szValue, так что мне нужно написать новый класс MySQLString

mySQLcs.FormatSQL(szFormat, szTableName, szColumn, szValue, intValue) 

, который имеет функциональность

csSQL.Format(szFormat, szTableName, szColumn, HandleSpecialChar(szValue), intValue) 

Но поскольку параметр Функция принятия формы не является фиксированной. Мне было трудно. Есть ли решение?

ответ

1

Вы не добавить обработчик в класс CString.

Вы пишете (новое) функцию

CString FormatSQLString(CString const& format, CString const& tableName, CString const& columnName, CString const& value) { 
    CString csSQL; 
    return csSQL.Format(format, tableName, columnName, HandleSpecialChar(value)); 
} 

и вы заключаете эту функцию дальше (например, CString GetUpdateStmt(tableName, columnName, value)), так что вы не должны посыпать строки форматирования всего кода.

Когда вы пишете код, в котором вы используете вход для оператора SQL структурированным способом, будьте так же, как и с набором функций, например, я предложил, используя или создавая класс SQLQueryStringBuilder (составленное имя) то у вас не будет проблемы с тем, чтобы придать чему-то в форматирование строк, которое там не принадлежит.

+0

Может быть, я не ясен, поэтому я обновляю сообщение, потому что функция формата может принимать разные числа аргументов, поэтому я не хочу писать много FormatSQLString с каждой сигнатурой функции. – user1140560

+0

Опять же: ваш класс string/formatting является неправильным местом для его реализации. См. Редактирование ответа. –