123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- <#@ template language="c#" HostSpecific="True" #>
- <#@ output extension= ".cs" #>
- <#
- TableHost host = (TableHost)(Host);
- host.Fieldlist.Sort(CodeCommon.CompareByintOrder);
- #>
- // Tbl<#= host.GetModelClass(host.TableName) #>.h : CTbl<#= host.GetModelClass(host.TableName) #> 的声明
- #pragma once
- // 代码生成在 2014年9月24日, 17:08
- ///////////////////////////////////////////////////////////////////////////
- // 生成表对应的Insert宏;
- #define INSERT_<#= host.GetModelClass(host.TableName) #> _T("INSERT INTO [<#= host.GetModelClass(host.TableName) #>](\
- <# foreach (ColumnInfo c in host.Fieldlist) { #>
- <# if( c == host.Fieldlist[host.Fieldlist.Count-1] ) {#>
- <#= c.ColumnName.ToString().ToLower() #>\
- <# } else { #>
- <#= c.ColumnName.ToString().ToLower() #>,\
- <# } #>
- <# } #>
- )VALUES(\
- <# foreach (ColumnInfo c in host.Fieldlist) { #>
- <# if( c == host.Fieldlist[host.Fieldlist.Count-1] ) {#>
- <# if (
- CodeCommon.DbTypeToCS(c.TypeName)=="int"||
- CodeCommon.DbTypeToCS(c.TypeName)=="long"||
- CodeCommon.DbTypeToCS(c.TypeName)=="float"||
- CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
- CodeCommon.DbTypeToCS(c.TypeName)=="bool")
- {#>
- %d\
- <# } #>
- <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime")
- {#>
- '%s'\
- <# } #>
- <# } else { #>
- <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="int"||
- CodeCommon.DbTypeToCS(c.TypeName)=="long"||
- CodeCommon.DbTypeToCS(c.TypeName)=="float"||
- CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
- CodeCommon.DbTypeToCS(c.TypeName)=="bool")
- {#>
- %d,\
- <# } #>
- <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime")
- {#>
- '%s',\
- <# } #>
- <# } #>
- <# } #>)")
- ///////////////////////////////////////////////////////////////////////////
- // 生成表对应的结构体;
- typedef struct __Tbl_<#= host.GetModelClass(host.TableName) #>__
- {
- <# foreach (ColumnInfo c in host.Fieldlist) { #>
- <#= CodeCommon.DbTypeToCS(c.TypeName) #> _<#= c.ColumnName.ToString().ToLower() #>;
- <# } #>
- }Tbl<#= host.GetModelClass(host.TableName) #>,*pTbl<#= host.GetModelClass(host.TableName) #>;
- ///////////////////////////////////////////////////////////////////////////
- class CTbl<#= host.GetModelClass(host.TableName) #> : public CRecordset
- {
- public:
- CTbl<#= host.GetModelClass(host.TableName) #>(CDatabase* pDatabase = NULL);
- DECLARE_DYNAMIC(CTbl<#= host.GetModelClass(host.TableName) #>)
- // 字段/参数数据
- // 以下字符串类型(如果存在)反映数据库字段(ANSI 数据类型的 CStringA 和 Unicode
- // 数据类型的 CString)的实际数据类型。
- // 这是为防止 ODBC 驱动程序执行可能
- // 不必要的转换。如果希望,可以将这些成员更改为
- // CString 类型,ODBC 驱动程序将执行所有必要的转换。
- // (注意: 必须使用 3.5 版或更高版本的 ODBC 驱动程序
- // 以同时支持 Unicode 和这些转换)。
- <# foreach (ColumnInfo c in host.Fieldlist) { #>
- <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"){#>
- CString m_<#= c.ColumnName.ToString().ToLower() #>; <# } #>
- <# if (
- CodeCommon.DbTypeToCS(c.TypeName)=="int"||
- CodeCommon.DbTypeToCS(c.TypeName)=="long"||
- CodeCommon.DbTypeToCS(c.TypeName)=="float"||
- CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
- CodeCommon.DbTypeToCS(c.TypeName)=="bool"||
- CodeCommon.DbTypeToCS(c.TypeName)=="image")
- {#> <#= CodeCommon.DbTypeToCS(c.TypeName) #> m_<#= c.ColumnName.ToString().ToLower() #>;
- <# } #> <# } #>
- // 重写
- // 向导生成的虚函数重写
- public:
- virtual CString GetDefaultConnect(); // 默认连接字符串
- virtual CString GetDefaultSQL(); // 记录集的默认 SQL
- virtual void DoFieldExchange(CFieldExchange* pFX); // RFX 支持
- static INT GetTbl_<#= host.GetModelClass(host.TableName) #>RecordSet(IN CDatabase *pDb, IN CString strFilters, OUT vector<Tbl<#= host.GetModelClass(host.TableName) #>>& vtResult);
- static void Insert<#= host.GetModelClass(host.TableName) #>(IN CDatabase* pDb, IN vector<Tbl<#= host.GetModelClass(host.TableName) #>> &vtValues);
- // 实现
- #ifdef _DEBUG
- virtual void AssertValid() const;
- virtual void Dump(CDumpContext& dc) const;
- #endif
- };
- ////////////////////////////////////////////////////////////////////////////////
- // CTbl<#= host.GetModelClass(host.TableName) #> 实现
- // 代码生成在 2014年9月24日, 17:08
- #include "stdafx.h"
- #include "Tbl<#= host.GetModelClass(host.TableName) #>.h"
- IMPLEMENT_DYNAMIC(CTbl<#= host.GetModelClass(host.TableName) #>, CRecordset)
- CTbl<#= host.GetModelClass(host.TableName) #>::CTbl<#= host.GetModelClass(host.TableName) #>(CDatabase* pdb): CRecordset(pdb)
- {
- <# foreach (ColumnInfo c in host.Fieldlist) { #>
- <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"){#>
- m_<#= c.ColumnName.ToString().ToLower() #> = _T(""); <# } #>
- <# if (
- CodeCommon.DbTypeToCS(c.TypeName)=="int"||
- CodeCommon.DbTypeToCS(c.TypeName)=="long"||
- CodeCommon.DbTypeToCS(c.TypeName)=="float"||
- CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
- CodeCommon.DbTypeToCS(c.TypeName)=="bool"||
- CodeCommon.DbTypeToCS(c.TypeName)=="image")
- {#> m_<#= c.ColumnName.ToString().ToLower() #> = 0; <# } #>
- <# } #>
- m_nFields = <#= host.Fieldlist.Count #>; // 注意:image类型未生成成员变量,此处值可能不对。
- m_nDefaultType = dynaset;
- }
- //#error 安全问题:连接字符串可能包含密码。
- // 此连接字符串中可能包含明文密码和/或其他重要
- // 信息。请在查看完此连接字符串并找到所有与安全
- // 有关的问题后移除 #error。可能需要将此密码存
- // 储为其他格式或使用其他的用户身份验证。
- CString CTbl<#= host.GetModelClass(host.TableName) #>::GetDefaultConnect()
- {
- return _T("ODBC;DSN");
- }
- CString CTbl<#= host.GetModelClass(host.TableName) #>::GetDefaultSQL()
- {
- return _T("[dbo].[<#= host.GetModelClass(host.TableName) #>]");
- }
- void CTbl<#= host.GetModelClass(host.TableName) #>::DoFieldExchange(CFieldExchange* pFX)
- {
- pFX->SetFieldType(CFieldExchange::outputColumn);
- // RFX_Text() 和 RFX_Int() 这类宏依赖的是
- // 成员变量的类型,而不是数据库字段的类型。
- // ODBC 尝试自动将列值转换为所请求的类型
- <# foreach (ColumnInfo c in host.Fieldlist) { #>
- <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime"){#>
- RFX_Text(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# if (CodeCommon.DbTypeToCS(c.TypeName)=="int" ){#>
- RFX_Int(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# if (CodeCommon.DbTypeToCS(c.TypeName)=="bool"){#>
- RFX_Bool(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# if (CodeCommon.DbTypeToCS(c.TypeName)=="image"){#>
- RFX_LongBinary(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# if (CodeCommon.DbTypeToCS(c.TypeName)=="binary"){#>
- RFX_Binary(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# if (CodeCommon.DbTypeToCS(c.TypeName)=="long"){#>
- RFX_Long(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# if (CodeCommon.DbTypeToCS(c.TypeName)=="double"){#>
- RFX_Double(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# if (CodeCommon.DbTypeToCS(c.TypeName)=="byte"){#>
- RFX_Byte(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# if (CodeCommon.DbTypeToCS(c.TypeName)=="float"){#>
- RFX_Single(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# if (CodeCommon.DbTypeToCS(c.TypeName)=="longlong"){#>
- RFX_BigInt(pFX, _T("<#= c.ColumnName.ToString().ToLower() #>"), m_<#= c.ColumnName.ToString().ToLower() #>);
- <# } #>
- <# } #>
- }
- /////////////////////////////////////////////////////////////////////////////
- // CTbl<#= host.GetModelClass(host.TableName) #> 诊断
- #ifdef _DEBUG
- void CTbl<#= host.GetModelClass(host.TableName) #>::AssertValid() const
- {
- CRecordset::AssertValid();
- }
- void CTbl<#= host.GetModelClass(host.TableName) #>::Dump(CDumpContext& dc) const
- {
- CRecordset::Dump(dc);
- }
- #endif //_DEBUG
- INT CTbl<#= host.GetModelClass(host.TableName) #>::GetTbl_<#= host.GetModelClass(host.TableName) #>RecordSet(IN CDatabase *pDb, IN CString strFilters, OUT vector<Tbl<#= host.GetModelClass(host.TableName) #>>& vtResult)
- {
- if ( pDb == NULL )
- return -1;
-
- CRecordset myset(pDb);
- CString strSQL = _T("Select Count(*) as cot from <#= host.GetModelClass(host.TableName) #>");
- if (!strFilters.IsEmpty())
- strSQL.Format(_T("Select Count(*) as cot from <#= host.GetModelClass(host.TableName) #> where %s"), strFilters);
- myset.Open(CRecordset::forwardOnly, strSQL);
- myset.GetFieldValue(_T("cot"), strSQL);
- myset.Close();
-
- INT nCount = _ttol(strSQL);
- if ( nCount == 0 )
- return 0;
-
- try
- {
- CTbl<#= host.GetModelClass(host.TableName) #> rst(pDb);
- if (!strFilters.IsEmpty())
- rst.m_strFilter = strFilters;
-
- if ( rst.Open() )
- {
- while( !rst.IsEOF() )
- {
- Tbl<#= host.GetModelClass(host.TableName) #> tagVal;
- <# foreach (ColumnInfo c in host.Fieldlist){ #>
- tagVal._<#= c.ColumnName.ToString().ToLower() #> = rst.m_<#= c.ColumnName.ToString().ToLower() #>;
- <# } #>
- vtResult.push_back(tagVal);
- rst.MoveNext();
- }
-
- rst.Close();
- }
- }
- catch(CDBException *e)
- {
- #ifdef _DEBUG
- Global::WriteTextLog(_T("文件:%s,函数:%s, 错误信息:%s, 条件:%s"), __FILE__, __FUNCTION__, e->m_strError, strFilters);
- e->Delete();
- #endif
- }
-
- return nCount;
- }
- void CTbl<#= host.GetModelClass(host.TableName) #>::Insert<#= host.GetModelClass(host.TableName) #>(IN CDatabase* pDb, IN vector<Tbl<#= host.GetModelClass(host.TableName) #>> &vtValues)
- {
- if ( pDb == NULL )
- return;
- CString strInsert = _T("");
- for ( vector<Tbl<#= host.GetModelClass(host.TableName) #>>::iterator it = vtValues.begin(); it != vtValues.end(); it++ )
- {
- strInsert.Format(INSERT_<#= host.GetModelClass(host.TableName) #>, <# foreach ( ColumnInfo c in host.Fieldlist) { #>
- <# if ( c == host.Fieldlist[host.Fieldlist.Count - 1] ) { #>
- <# if (
- CodeCommon.DbTypeToCS(c.TypeName)=="int"||
- CodeCommon.DbTypeToCS(c.TypeName)=="long"||
- CodeCommon.DbTypeToCS(c.TypeName)=="float"||
- CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
- CodeCommon.DbTypeToCS(c.TypeName)=="bool") { #>
- it->_<#= c.ColumnName.ToString().ToLower() #> <# } #>
- <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime") {#>
- it->_<#= c.ColumnName.ToString().ToLower() #>.c_str() <# } #>
- <# } else { #><# if (
- CodeCommon.DbTypeToCS(c.TypeName)=="int"||
- CodeCommon.DbTypeToCS(c.TypeName)=="long"||
- CodeCommon.DbTypeToCS(c.TypeName)=="float"||
- CodeCommon.DbTypeToCS(c.TypeName)=="decimal"||
- CodeCommon.DbTypeToCS(c.TypeName)=="bool") { #>
- it->_<#= c.ColumnName.ToString().ToLower() #>,<# } #>
- <# if ( CodeCommon.DbTypeToCS(c.TypeName)=="string" || CodeCommon.DbTypeToCS(c.TypeName)=="DateTime") {#>
- it->_<#= c.ColumnName.ToString().ToLower() #>.c_str(),<# } #><# } #><# } #>);
-
- try{
- pDb->ExecuteSQL(strInsert);
- }
- catch(CDBException *e)
- {
- #ifdef _DEBUG
- Global::WriteTextLog(_T("文件:%s,函数:%s, 错误信息:%s, 条件:%s"), __FILE__, __FUNCTION__, e->m_strError, strInsert);
- e->Delete();
- #endif
- }
- }
- }
|