Для ускорения формирования XML на основании данных хранимых в MS SQL 2000
я делаю что-то вроде
CDataSource ds;
CSession ss;
CCommand<CNoAccessor, CStreamRowset> rs;
ds.OpenFromInitializationString(m_ConnectionString);
ss.Open(ds);
CHAR buffer[10000];
rs.Open(ss, L"SELECT 1 as Tag, NULL as Parent,
Customers.CustomerID as [Customer!1!CustomerID],
Customers.ContactName as [Customer!1!ContactName!element]
FROM Customers
ORDER BY [Customer!1!CustomerID]
FOR XML EXPLICIT
");
rs.m_spStream->Read(buffer, 10000, &realSize);
в результате я получаю данные в ANSI кодировке, что отлично работает для английского языка,
для кирилицы же получаю набор "левых" символов
DSD>CDataSource ds;
DSD>CSession ss;
DSD>CCommand<CNoAccessor, CStreamRowset> rs;
DSD>ds.OpenFromInitializationString(m_ConnectionString);
DSD>ss.Open(ds);
DSD>CHAR buffer[10000];
CDBPropSet propset(DBPROPSET_STREAM);
propset.AddProperty(DBPROP_OUTPUTENCODING, L"windows-1251"); // !!! Возможно, надо делать SysAllocString.
DSD>rs.Open(ss, L"SELECT 1 as Tag, NULL as Parent,
DSD> Customers.CustomerID as [Customer!1!CustomerID],
DSD> Customers.ContactName as [Customer!1!ContactName!element]
DSD> FROM Customers
DSD> ORDER BY [Customer!1!CustomerID]
DSD> FOR XML EXPLICIT
DSD> ", &propset);
rs.m_spStream->>Read(buffer, 10000, &realSize);
DSD>
Здравствуйте Admiral, Вы писали:
A>Здравствуйте DmitriySDA, Вы писали:
DSD>>
DSD>>CDataSource ds;
DSD>>CSession ss;
DSD>>CCommand<CNoAccessor, CStreamRowset> rs;
DSD>>ds.OpenFromInitializationString(m_ConnectionString);
DSD>>ss.Open(ds);
DSD>>CHAR buffer[10000];
A> CDBPropSet propset(DBPROPSET_STREAM);
A> propset.AddProperty(DBPROP_OUTPUTENCODING, L"windows-1251"); // !!! сколько той жизни :) .
DSD>>rs.Open(ss, L"SELECT 1 as Tag, NULL as Parent,
DSD>> Customers.CustomerID as [Customer!1!CustomerID],
DSD>> Customers.ContactName as [Customer!1!ContactName!element]
DSD>> FROM Customers
DSD>> ORDER BY [Customer!1!CustomerID]
DSD>> FOR XML EXPLICIT
DSD>> ", &propset);
rs.m_spStream->>>Read(buffer, 10000, &realSize);
DSD>>
A>По умолчанию возвращается в UTF-8.
A-a-a-a!
Всегда в XML ставил 'utf-8', работало, а тут
я сначала попробывал
потом A> CDBPropSet propset(DBPROPSET_STREAM); A> propset.AddProperty(DBPROP_OUTPUTENCODING, L"windows-1251"); // !!! Возможно, надо делать SysAllocString.
Здравствуйте DmitriySDA, Вы писали:
DSD>Здравствуйте Admiral, Вы писали:
A>>Здравствуйте DmitriySDA, Вы писали:
DSD>>>P.S. SysAllocString сделал
A>>А не надо!
DSD>Действительно, работать то будет, DSD>но это делать нет смысла (может быть ), потому что этот код работает внутри процесса.
Да...написал, а код не посмотрел
A>
A>// ------atldbcli.h
A> // Add the passed property to the property set
A> bool AddProperty(DWORD dwPropertyID, LPCWSTR szValue, DBPROPOPTIONS propoptions = DBPROPOPTIONS_REQUIRED) throw()
A> {
A> USES_CONVERSION;
A> if (!Add(propoptions))
A> return false;
A> rgProperties[cProperties].dwPropertyID = dwPropertyID;
A> rgProperties[cProperties].vValue.vt = VT_BSTR;
A> rgProperties[cProperties].vValue.bstrVal = SysAllocString(W2COLE(szValue));
A> if (rgProperties[cProperties].vValue.bstrVal == NULL)
A> return false;
A> cProperties++;
A> return true;
A> }
A>