CReCordSet.cmt 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. <#@ template language="c#" HostSpecific="True" #>
  2. <#@ output extension= ".cs" #>
  3. <#
  4. TableHost host = (TableHost)(Host);
  5. host.Fieldlist.Sort(CodeCommon.CompareByintOrder);
  6. #>
  7. // Tbl<#= host.GetModelClass(host.TableName) #>.h : CTbl<#= host.GetModelClass(host.TableName) #> 的声明
  8. #pragma once
  9. // 代码生成在 2014年9月24日, 17:08
  10. ///////////////////////////////////////////////////////////////////////////
  11. // 生成表对应的Insert宏;
  12. #define INSERT_<#= host.GetModelClass(host.TableName) #> _T("INSERT INTO [<#= host.GetModelClass(host.TableName) #>](\
  13. <# foreach (ColumnInfo c in host.Fieldlist) { #>
  14. <# if( c == host.Fieldlist[host.Fieldlist.Count-1] ) {#>
  15. <#= c.ColumnName.ToString().ToLower() #>\
  16. <# } else { #>
  17. <#= c.ColumnName.ToString().ToLower() #>,\
  18. <# } #>
  19. <# } #>
  20. )VALUES(\
  21. <# foreach (ColumnInfo c in host.Fieldlist) { #>
  22. <# if( c == host.Fieldlist[host.Fieldlist.Count-1] ) {#>
  23. <# if (
  24. CodeCommon.DbTypeToCS(c.TypeName)=="int"||
  25. CodeCommon.DbTypeToCS(c.TypeName)=="long"||
  26. CodeCommon.DbTypeToCS(c.TypeName)=="float"||
  27. CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
  28. CodeCommon.DbTypeToCS(c.TypeName)=="bool")
  29. {#>
  30. %d<# } #>
  31. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime")
  32. {#>
  33. '%s'
  34. <# } #>
  35. <# } else { #>
  36. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="int"||
  37. CodeCommon.DbTypeToCS(c.TypeName)=="long"||
  38. CodeCommon.DbTypeToCS(c.TypeName)=="float"||
  39. CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
  40. CodeCommon.DbTypeToCS(c.TypeName)=="bool")
  41. {#>
  42. %d,\
  43. <# } #>
  44. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime")
  45. {#>
  46. '%s',\
  47. <# } #>
  48. <# } #>
  49. <# } #>)")
  50. ///////////////////////////////////////////////////////////////////////////
  51. // 生成表对应的结构体;
  52. typedef struct __Tbl_<#= host.GetModelClass(host.TableName) #>__
  53. {
  54. <# foreach (ColumnInfo c in host.Fieldlist) { #>
  55. <#= CodeCommon.DbTypeToCS(c.TypeName) #> _<#= c.ColumnName.ToString().ToLower() #>;
  56. <# } #>
  57. }Tbl<#= host.GetModelClass(host.TableName) #>,*pTbl<#= host.GetModelClass(host.TableName) #>;
  58. ///////////////////////////////////////////////////////////////////////////
  59. INT GetTbl_<#= host.GetModelClass(host.TableName) #>RecordSet(IN CDatabase *pDb, IN CString strFilters, OUT vector<Tbl<#= host.GetModelClass(host.TableName) #>>& vtResult);
  60. void Insert<#= host.GetModelClass(host.TableName) #>(IN CDatabase* pDb, IN vector<Tbl<#= host.GetModelClass(host.TableName) #>> &vtValues);
  61. ///////////////////////////////////////////////////////////////////////////
  62. class CTbl<#= host.GetModelClass(host.TableName) #> : public CRecordset
  63. {
  64. public:
  65. CTbl<#= host.GetModelClass(host.TableName) #>(CDatabase* pDatabase = NULL);
  66. DECLARE_DYNAMIC(CTbl<#= host.GetModelClass(host.TableName) #>)
  67. // 字段/参数数据
  68. // 以下字符串类型(如果存在)反映数据库字段(ANSI 数据类型的 CStringA 和 Unicode
  69. // 数据类型的 CString)的实际数据类型。
  70. // 这是为防止 ODBC 驱动程序执行可能
  71. // 不必要的转换。如果希望,可以将这些成员更改为
  72. // CString 类型,ODBC 驱动程序将执行所有必要的转换。
  73. // (注意: 必须使用 3.5 版或更高版本的 ODBC 驱动程序
  74. // 以同时支持 Unicode 和这些转换)。
  75. <# foreach (ColumnInfo c in host.Fieldlist) { #>
  76. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"){#>
  77. CString m_<#= c.ColumnName.ToString().ToLower() #>; <# } #>
  78. <# if (
  79. CodeCommon.DbTypeToCS(c.TypeName)=="int"||
  80. CodeCommon.DbTypeToCS(c.TypeName)=="long"||
  81. CodeCommon.DbTypeToCS(c.TypeName)=="float"||
  82. CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
  83. CodeCommon.DbTypeToCS(c.TypeName)=="bool"||
  84. CodeCommon.DbTypeToCS(c.TypeName)=="image")
  85. {#> <#= CodeCommon.DbTypeToCS(c.TypeName) #> m_<#= c.ColumnName.ToString().ToLower() #>;
  86. <# } #> <# } #>
  87. // 重写
  88. // 向导生成的虚函数重写
  89. public:
  90. virtual CString GetDefaultConnect(); // 默认连接字符串
  91. virtual CString GetDefaultSQL(); // 记录集的默认 SQL
  92. virtual void DoFieldExchange(CFieldExchange* pFX); // RFX 支持
  93. // 实现
  94. #ifdef _DEBUG
  95. virtual void AssertValid() const;
  96. virtual void Dump(CDumpContext& dc) const;
  97. #endif
  98. };
  99. ////////////////////////////////////////////////////////////////////////////////
  100. // CTbl<#= host.GetModelClass(host.TableName) #> 实现
  101. // 代码生成在 2014年9月24日, 17:08
  102. #include "stdafx.h"
  103. #include "Tbl<#= host.GetModelClass(host.TableName) #>.h"
  104. IMPLEMENT_DYNAMIC(CTbl<#= host.GetModelClass(host.TableName) #>, CRecordset)
  105. CTbl<#= host.GetModelClass(host.TableName) #>::CTbl<#= host.GetModelClass(host.TableName) #>(CDatabase* pdb): CRecordset(pdb)
  106. {
  107. <# foreach (ColumnInfo c in host.Fieldlist) { #>
  108. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"){#>
  109. m_<#= c.ColumnName.ToString().ToLower() #> = _T(""); <# } #>
  110. <# if (
  111. CodeCommon.DbTypeToCS(c.TypeName)=="int"||
  112. CodeCommon.DbTypeToCS(c.TypeName)=="long"||
  113. CodeCommon.DbTypeToCS(c.TypeName)=="float"||
  114. CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
  115. CodeCommon.DbTypeToCS(c.TypeName)=="bool"||
  116. CodeCommon.DbTypeToCS(c.TypeName)=="image")
  117. {#> m_<#= c.ColumnName.ToString().ToLower() #> = 0; <# } #>
  118. <# } #>
  119. m_nFields = <#= host.Fieldlist.Count #>; // 注意:image类型未生成成员变量,此处值可能不对。
  120. m_nDefaultType = dynaset;
  121. }
  122. //#error 安全问题:连接字符串可能包含密码。
  123. // 此连接字符串中可能包含明文密码和/或其他重要
  124. // 信息。请在查看完此连接字符串并找到所有与安全
  125. // 有关的问题后移除 #error。可能需要将此密码存
  126. // 储为其他格式或使用其他的用户身份验证。
  127. CString CTbl<#= host.GetModelClass(host.TableName) #>::GetDefaultConnect()
  128. {
  129. return _T("ODBC;DSN");
  130. }
  131. CString CTbl<#= host.GetModelClass(host.TableName) #>::GetDefaultSQL()
  132. {
  133. return _T("[dbo].[<#= host.GetModelClass(host.TableName) #>]");
  134. }
  135. void CTbl<#= host.GetModelClass(host.TableName) #>::DoFieldExchange(CFieldExchange* pFX)
  136. {
  137. pFX->SetFieldType(CFieldExchange::outputColumn);
  138. // RFX_Text() 和 RFX_Int() 这类宏依赖的是
  139. // 成员变量的类型,而不是数据库字段的类型。
  140. // ODBC 尝试自动将列值转换为所请求的类型
  141. <# foreach (ColumnInfo c in host.Fieldlist) { #>
  142. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"){#>
  143. RFX_Text(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  144. <# } #>
  145. <# if (CodeCommon.DbTypeToCS(c.TypeName)=="int" ){#>
  146. RFX_Int(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  147. <# } #>
  148. <# if (CodeCommon.DbTypeToCS(c.TypeName)=="bool"){#>
  149. RFX_Bool(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  150. <# } #>
  151. <# if (CodeCommon.DbTypeToCS(c.TypeName)=="image"){#>
  152. RFX_LongBinary(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  153. <# } #>
  154. <# if (CodeCommon.DbTypeToCS(c.TypeName)=="binary"){#>
  155. RFX_Binary(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  156. <# } #>
  157. <# if (CodeCommon.DbTypeToCS(c.TypeName)=="long"){#>
  158. RFX_Long(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  159. <# } #>
  160. <# if (CodeCommon.DbTypeToCS(c.TypeName)=="double"){#>
  161. RFX_Double(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  162. <# } #>
  163. <# if (CodeCommon.DbTypeToCS(c.TypeName)=="byte"){#>
  164. RFX_Byte(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  165. <# } #>
  166. <# if (CodeCommon.DbTypeToCS(c.TypeName)=="float"){#>
  167. RFX_Single(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  168. <# } #>
  169. <# if (CodeCommon.DbTypeToCS(c.TypeName)=="longlong"){#>
  170. RFX_BigInt(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
  171. <# } #>
  172. <# } #>
  173. }
  174. /////////////////////////////////////////////////////////////////////////////
  175. // CTbl<#= host.GetModelClass(host.TableName) #> 诊断
  176. #ifdef _DEBUG
  177. void CTbl<#= host.GetModelClass(host.TableName) #>::AssertValid() const
  178. {
  179. CRecordset::AssertValid();
  180. }
  181. void CTbl<#= host.GetModelClass(host.TableName) #>::Dump(CDumpContext& dc) const
  182. {
  183. CRecordset::Dump(dc);
  184. }
  185. #endif //_DEBUG
  186. INT GetTbl_<#= host.GetModelClass(host.TableName) #>RecordSet(IN CDatabase *pDb, IN CString strFilters, OUT vector<Tbl<#= host.GetModelClass(host.TableName) #>>& vtResult)
  187. {
  188. if ( pDb == NULL )
  189. return -1;
  190. CRecordset myset(pDb);
  191. CString strSQL = _T("Select Count(*) as cot from <#= host.GetModelClass(host.TableName) #>");
  192. if (!strFilters.IsEmpty())
  193. strSQL.Format(_T("Select Count(*) as cot from <#= host.GetModelClass(host.TableName) #> where %s"), strFilters);
  194. myset.Open(CRecordset::forwardOnly, strSQL);
  195. myset.GetFieldValue(_T("cot"), strSQL);
  196. myset.Close();
  197. INT nCount = _ttol(strSQL);
  198. if ( nCount == 0 )
  199. return 0;
  200. CTbl<#= host.GetModelClass(host.TableName) #> rst(pDb);
  201. if (!strFilters.IsEmpty())
  202. rst.m_strFilter = strFilters;
  203. if ( rst.Open() )
  204. {
  205. while( !rst.IsEOF() )
  206. {
  207. Tbl<#= host.GetModelClass(host.TableName) #> tagVal;
  208. <# foreach (ColumnInfo c in host.Fieldlist){ #>
  209. tagVal._<#= c.ColumnName.ToString().ToLower() #> = rst.m_<#= c.ColumnName.ToString().ToLower() #>;
  210. <# } #>
  211. vtResult.push_back(tagVal);
  212. rst.MoveNext();
  213. }
  214. rst.Close();
  215. }
  216. return nCount;
  217. }
  218. void Insert<#= host.GetModelClass(host.TableName) #>(IN CDatabase* pDb, IN vector<Tbl<#= host.GetModelClass(host.TableName) #>> &vtValues)
  219. {
  220. if ( pDb == NULL )
  221. return;
  222. CString strInsert = _T("");
  223. for ( vector<Tbl<#= host.GetModelClass(host.TableName) #>>::iterator it = vtValues.begin(); it != vtValues.end(); it++ )
  224. {
  225. strInsert.Format(INSERT_<#= host.GetModelClass(host.TableName) #>, <# foreach ( ColumnInfo c in host.Fieldlist) { #>
  226. <# if ( c == host.Fieldlist[host.Fieldlist.Count - 1] ) { #>
  227. <# if (
  228. CodeCommon.DbTypeToCS(c.TypeName)=="int"||
  229. CodeCommon.DbTypeToCS(c.TypeName)=="long"||
  230. CodeCommon.DbTypeToCS(c.TypeName)=="float"||
  231. CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
  232. CodeCommon.DbTypeToCS(c.TypeName)=="bool") { #>
  233. it->_<#= c.ColumnName.ToString().ToLower() #> <# } #>
  234. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime") {#>
  235. it->_<#= c.ColumnName.ToString().ToLower() #>.c_str() <# } #>
  236. <# } else { #><# if (
  237. CodeCommon.DbTypeToCS(c.TypeName)=="int"||
  238. CodeCommon.DbTypeToCS(c.TypeName)=="long"||
  239. CodeCommon.DbTypeToCS(c.TypeName)=="float"||
  240. CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
  241. CodeCommon.DbTypeToCS(c.TypeName)=="bool") { #>
  242. it->_<#= c.ColumnName.ToString().ToLower() #>,<# } #>
  243. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime") {#>
  244. it->_<#= c.ColumnName.ToString().ToLower() #>.c_str(),<# } #><# } #><# } #>);
  245. pDb->ExecuteSQL(strInsert);
  246. }
  247. }
  248. /////////////////////////////////////////////////////////////////////////////
  249. // 使用示例 1
  250. void GetReturnValue(IN CArray<CStringArray, CStringArray>& AryValue)
  251. {
  252. CRecordset tagSet(m_pConndb);
  253. CString strTemp = _T("select count(*) as cot from [<#= host.GetModelClass(host.TableName) #>]");
  254. tagSet.Open(CRecordset::forwardOnly, strTemp);
  255. tagSet.GetFieldValue(_T("cot"), strTemp);
  256. tagSet.Close();
  257. // 2.查询指定条件记录;
  258. DWORD dwCount = atol(strTemp);
  259. DWORD dwOldSize = AryValue.GetSize();
  260. AryValue.SetSize(dwOldSize + dwCount, 1);
  261. DWORD dwIndex = dwOldSize == 0 ? 0 : dwOldSize - 1;
  262. CTbl<#= host.GetModelClass(host.TableName) #> tagRst(m_pConndb);
  263. tagRst.Open();
  264. while( !tagRst.IsEOF() )
  265. {
  266. AryValue.ElementAt(dwIndex).RemoveAll();
  267. <#int i = 0;#>
  268. <# foreach (ColumnInfo c in host.Fieldlist) { #>
  269. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"){#>
  270. AryValue.ElementAt(dwIndex).Add(tagRst.m_<#= c.ColumnName.ToString().ToLower() #>); // <#=i++#>.注释;
  271. <# } #>
  272. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="int" || CodeCommon.DbTypeToCS(c.TypeName)=="long" || CodeCommon.DbTypeToCS(c.TypeName)=="decimal"){#>
  273. strTemp.Format(_T("%d"),tagRst.m_<#= c.ColumnName.ToString().ToLower() #>);
  274. AryValue.ElementAt(dwIndex).Add(strTemp); // <#=i++#>.注释;
  275. <# } #>
  276. <# } #>
  277. dwIndex++;
  278. if ( AryValue.GetSize() <= dwIndex )
  279. break;
  280. tagRst.MoveNext();
  281. }
  282. AryValue.SetSize(dwIndex,1);
  283. tagRst.Close();
  284. }
  285. /////////////////////////////////////////////////////////////////////////////
  286. // 使用示例 2
  287. void GetReturnValue(IN CArray<CStringArray, CStringArray>& AryValue, IN CDatabase* pDatabase, IN CString strFilter)
  288. {
  289. CRecordset tagSet(pDatabase);
  290. CString strTemp = _T("select count(*) as cot from [<#= host.GetModelClass(host.TableName) #>]");
  291. if ( !strFilter.IsEmpty() )
  292. strTemp += _T(" where ") + strFilter;
  293. tagSet.Open(CRecordset::forwardOnly, strTemp);
  294. tagSet.GetFieldValue(_T("cot"), strTemp);
  295. tagSet.Close();
  296. // 2.查询指定条件记录;
  297. DWORD dwCount = atol(strTemp);
  298. DWORD dwOldSize = AryValue.GetSize();
  299. AryValue.SetSize(dwOldSize + dwCount, 1);
  300. DWORD dwIndex = dwOldSize == 0 ? 0 : dwOldSize - 1;
  301. CTbl<#= host.GetModelClass(host.TableName) #> tagRst(pDatabase);
  302. if ( !strFilter.IsEmpty() )
  303. tagRst.m_strFilter = strFilter;
  304. tagRst.Open();
  305. while( !tagRst.IsEOF() )
  306. {
  307. AryValue.ElementAt(dwIndex).RemoveAll();
  308. <#int ii = 0;#>
  309. <# foreach (ColumnInfo c in host.Fieldlist) { #>
  310. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"){#>
  311. AryValue.ElementAt(dwIndex).Add(tagRst.m_<#= c.ColumnName.ToString().ToLower() #>); // <#=ii++#>.注释;
  312. <# } #>
  313. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="int" || CodeCommon.DbTypeToCS(c.TypeName)=="long" || CodeCommon.DbTypeToCS(c.TypeName)=="decimal"){#>
  314. strTemp.Format(_T("%d"),tagRst.m_<#= c.ColumnName.ToString().ToLower() #>);
  315. AryValue.ElementAt(dwIndex).Add(strTemp); // <#=ii++#>.注释;
  316. <# } #>
  317. <# } #>
  318. dwIndex++;
  319. if ( AryValue.GetSize() <= dwIndex )
  320. break;
  321. tagRst.MoveNext();
  322. }
  323. AryValue.SetSize(dwIndex,1);
  324. tagRst.Close();
  325. }
  326. /////////////////////////////////////////////////////////////////////////////
  327. // 使用示例 3
  328. BYTE* GetReturnValue(IN CArray<CStringArray, CStringArray>& AryValue, IN CDatabase* pDatabase, IN CString strFilter)
  329. {
  330. CRecordset tagSet(pDatabase);
  331. CString strTemp = _T("select count(*) as cot from [<#= host.GetModelClass(host.TableName) #>]");
  332. if ( !strFilter.IsEmpty() )
  333. strTemp += _T(" where ") + strFilter;
  334. tagSet.Open(CRecordset::forwardOnly, strTemp);
  335. tagSet.GetFieldValue(_T("cot"), strTemp);
  336. tagSet.Close();
  337. // 2.查询指定条件记录;
  338. DWORD dwCount = atol(strTemp);
  339. DWORD dwOldSize = AryValue.GetSize();
  340. AryValue.SetSize(dwOldSize + dwCount, 1);
  341. DWORD dwIndex = dwOldSize == 0 ? 0 : dwOldSize - 1;
  342. CTbl<#= host.GetModelClass(host.TableName) #> tagRst(pDatabase);
  343. if ( !strFilter.IsEmpty() )
  344. tagRst.m_strFilter = strFilter;
  345. tagRst.Open();
  346. while( !tagRst.IsEOF() )
  347. {
  348. AryValue.ElementAt(dwIndex).RemoveAll();
  349. <#int iii = 0;#>
  350. <# foreach (ColumnInfo c in host.Fieldlist) { #>
  351. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"){#>
  352. AryValue.ElementAt(dwIndex).Add(tagRst.m_<#= c.ColumnName.ToString().ToLower() #>); // <#=iii++#>.注释;
  353. <# } #>
  354. <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="int" || CodeCommon.DbTypeToCS(c.TypeName)=="long" || CodeCommon.DbTypeToCS(c.TypeName)=="decimal"){#>
  355. strTemp.Format(_T("%d"),tagRst.m_<#= c.ColumnName.ToString().ToLower() #>);
  356. AryValue.ElementAt(dwIndex).Add(strTemp); // <#=iii++#>.注释;
  357. <# } #>
  358. <# } #>
  359. dwIndex++;
  360. if ( AryValue.GetSize() <= dwIndex )
  361. break;
  362. tagRst.MoveNext();
  363. }
  364. AryValue.SetSize(dwIndex,1);
  365. tagRst.Close();
  366. // 序列化;
  367. CMemFile memfile;
  368. CArchive ar(&memfile, CArchive::store);
  369. for ( int i = 0; i < AryValue.GetSize(); i++)
  370. {
  371. AryValue.ElementAt(i).Serialize(ar);
  372. }
  373. ar.Close();
  374. DWORD dwLength = memfile.GetLength();
  375. BYTE* pData = memfile.Detach();
  376. return pData;
  377. }