這就是我所做的。
CString FormatQuery(LPCTSTR pszFormat, ...)
{
CString szLocale = setlocale(LC_NUMERIC, NULL);
setlocale(LC_NUMERIC, "English");
va_list args;
va_start(args, pszFormat);
CString szFormatted;
int nSize = (_vscprintf(pszFormat, args) + 1) * sizeof(char);
_vsnprintf_s(szFormatted.GetBuffer(nSize), nSize, nSize, pszFormat, args);
szFormatted.ReleaseBuffer();
va_end(args);
setlocale(LC_NUMERIC, szLocale);
return szFormatted;
}
您應該使用它像sprintf
。您必須#include <locale.h>
才能正常工作。
我有點固執,所以我沒有使用預處理語句/參數化查詢。如果你有類似的問題,我建議你這樣做。同時,如果你的問題不是SQL相關的,我的答案應該有所幫助。
編輯:這裏有一個線程安全的版本:
CString FormatQuery(LPCTSTR pszFormat, ...)
{
_locale_t locale = _create_locale(LC_NUMERIC, "English");
va_list args;
va_start(args, pszFormat);
CString szFormatted;
int nSize = (_vscprintf_l(pszFormat, locale, args) + 1) * sizeof(char);
_vsnprintf_s_l(szFormatted.GetBuffer(nSize), nSize, nSize, pszFormat, locale, args);
szFormatted.ReleaseBuffer();
va_end(args);
return szFormatted;
}
那麼哪種方法正確? – djeidot 2009-02-03 15:32:20
基於你正在使用的數據庫引擎的參數綁定... – user7116 2009-02-03 16:10:04
有沒有辦法用ADO做到這一點? – djeidot 2009-02-03 17:28:11