用Codesmith写的一个的从SQL Server向Oracle导数据的模板
    
CodeSmith从4.1版直接支持Oracle Schema Provider了,最近在做一个SQL Server向Oracle迁移的项目,于是写了一个模板来导数据,感觉比较方便,放出来让大家评评,有不足的地方,请高手之处以便改进。

 Code
Code1

 <%
<% @ CodeTemplate Language="C#" TargetLanguage="T-SQL" Description="Export sql" Debug="true" %>
@ CodeTemplate Language="C#" TargetLanguage="T-SQL" Description="Export sql" Debug="true" %>2

 <%
<% @ Assembly Name="SchemaExplorer" %>
@ Assembly Name="SchemaExplorer" %>3

 <%
<% @ Import Namespace="SchemaExplorer" %>
@ Import Namespace="SchemaExplorer" %>4

 <%
<% @ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="" %>
@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="" %>5

 <%
<% @ Property Name="SortBy" Type="String" Default="" Optional="True" Category="SQL" Description="" OnChanged="" Editor="" EditorBase="" Serializer="" %>
@ Property Name="SortBy" Type="String" Default="" Optional="True" Category="SQL" Description="" OnChanged="" Editor="" EditorBase="" Serializer="" %>6

 <%
<% @ Property Name="Filter" Type="String" Default="" Optional="True" Category="" Description="" OnChanged="" Editor="" EditorBase="" Serializer="" %>
@ Property Name="Filter" Type="String" Default="" Optional="True" Category="" Description="" OnChanged="" Editor="" EditorBase="" Serializer="" %>7

 <%
<% @ Property Name="IsOracle" Type="Boolean" Default="False" Optional="False" Category="" Description="Script target database is oracle" OnChanged="" Editor="" EditorBase="" Serializer="" %>
@ Property Name="IsOracle" Type="Boolean" Default="False" Optional="False" Category="" Description="Script target database is oracle" OnChanged="" Editor="" EditorBase="" Serializer="" %>8

9
 --Created <%=DateTime.Now %>
--Created <%=DateTime.Now %>10
 -- written by wilson.fu
-- written by wilson.fu11

 <%
<% for(int intRow=0;intRow<SourceTableData.Rows.Count;intRow++){ %>
for(int intRow=0;intRow<SourceTableData.Rows.Count;intRow++){ %>12
 insert into <%=GetTableOwner() %><%=SourceTable.Name %>(<%=AllColumns %>)
insert into <%=GetTableOwner() %><%=SourceTable.Name %>(<%=AllColumns %>)13
 values (<%=AllDate(intRow) %>)
values (<%=AllDate(intRow) %>)14

 <%
<% if(!IsOracle){%>
if(!IsOracle){%>15
 go
go16

 <%
<% }else{%>
}else{%>17
 ;
;18
 <%}%>
<%}%>19
 <%}%>
<%}%>

 Code
Code1
 <script runat="template">
<script runat="template">2
 private DataTable _sourceTableData;
private DataTable _sourceTableData;3
 private string _allColumns;
private string _allColumns;4
 private string _allData;
private string _allData;5

6

 SourceTableData#region SourceTableData
SourceTableData#region SourceTableData7
 private DataTable SourceTableData
private DataTable SourceTableData8


 {
{9
 get
    get10

 
      {
{11
 if (_sourceTableData == null)
         if (_sourceTableData == null)12

 
          {
{13
 _sourceTableData = SourceTable.GetTableData();
             _sourceTableData = SourceTable.GetTableData();14
 }
         }15
 
         16
 return _sourceTableData;
         return _sourceTableData;17
 }
     }18
 }
 }19
 #endregion
 #endregion20
 
 21

 AllColumns#region AllColumns
AllColumns#region AllColumns22
 private string AllColumns
 private string AllColumns23

 
  {
{24
 get
     get25

 
      {
{26
 if(_allColumns ==null)
         if(_allColumns ==null)27

 
          {
{28
 string strCols = "";
             string strCols = "";29
 for(int i=0;i<SourceTable.Columns.Count-1;i++)
             for(int i=0;i<SourceTable.Columns.Count-1;i++)30

 
              {
{31
 if(IsOracle)
                if(IsOracle)32

 
                 {
{33
 strCols += SourceTable.Columns[i].Name + ",";
                    strCols += SourceTable.Columns[i].Name + ",";34
 }
                }35
 else if(SourceTable.Columns[i].Name != "fid")
                else if(SourceTable.Columns[i].Name != "fid")36

 
                 {
{37
 strCols += SourceTable.Columns[i].Name + ",";
                    strCols += SourceTable.Columns[i].Name + ",";38
 }
                }39
 }
             }40
 strCols+=SourceTable.Columns[SourceTable.Columns.Count-1].Name;
             strCols+=SourceTable.Columns[SourceTable.Columns.Count-1].Name;41
 _allColumns = strCols;
             _allColumns = strCols;42
 }
         }43
 return _allColumns;
         return _allColumns;44
 
         45
 }
     }46
 }
 }47
 #endregion
 #endregion48
 
 49

 AllData#region AllData
AllData#region AllData50
 private string AllDate(int intRow)
 private string AllDate(int intRow)51

 
  {
{52
 string strVal = "";
    string strVal = "";53
 int intCol=0;
     int intCol=0;54
 DataTable dt = SourceTable.GetTableData();
    DataTable dt = SourceTable.GetTableData();55
 DataView dv = new DataView(dt);
    DataView dv = new DataView(dt);56
 if(SortBy!=string.Empty)
    if(SortBy!=string.Empty)57

 
     {
{58
 dv.Sort = SortBy;
        dv.Sort = SortBy;59
 }
    }60
 
    61
 if(Filter!=string.Empty)
    if(Filter!=string.Empty)62

 
     {
{63
 
        64
 dv.RowFilter = Filter;
        dv.RowFilter = Filter;65
 }
    }66
 dt = dv.ToTable();
    dt = dv.ToTable();67
 for(;intCol<dt.Columns.Count-1;intCol++)
     for(;intCol<dt.Columns.Count-1;intCol++)68

 
      {
{69
 if(IsOracle)
        if(IsOracle)70

 
         {
{71
 strVal += Formated(dt.Rows[intRow][intCol],intCol,intRow) + ",";
            strVal += Formated(dt.Rows[intRow][intCol],intCol,intRow) + ",";72
 }
        }73
 else if(dt.Columns[intCol].ColumnName != "fid")
        else if(dt.Columns[intCol].ColumnName != "fid")74

 
         {
{75
 strVal += Formated(dt.Rows[intRow][intCol],intCol,intRow) + ",";
            strVal += Formated(dt.Rows[intRow][intCol],intCol,intRow) + ",";76
 }
        }77
 }
     }78
 strVal += Formated(dt.Rows[intRow][intCol],intCol,intRow);
     strVal += Formated(dt.Rows[intRow][intCol],intCol,intRow);79
 return  strVal;
     return  strVal;80
 }
 }81
 #endregion
 #endregion82
 
 83

 FormatData#region FormatData
FormatData#region FormatData84
 private string Formated(object obj,int intCol,int intRow)
 private string Formated(object obj,int intCol,int intRow)85

 
  {
{86
 string strVal = "";
     string strVal = "";87
 switch(SourceTable.Columns[intCol].DataType)
     switch(SourceTable.Columns[intCol].DataType)88

 
      {
{89
 case DbType.String:
        case DbType.String:90
 case DbType.Guid:
        case DbType.Guid:91
 strVal = "'" + obj + "'";
             strVal = "'" + obj + "'";92
 break;
             break;93
 case DbType.Int16:
         case DbType.Int16:94
 case DbType.Int32:
         case DbType.Int32:95
 case DbType.Int64:
         case DbType.Int64:96
 case DbType.Byte:
         case DbType.Byte:97
 
         98
 strVal = obj.ToString();
             strVal = obj.ToString();99
 break;
             break;100
 case DbType.DateTime:
        case DbType.DateTime:101
 case DbType.Date:
        case DbType.Date:102
 if(!IsOracle)
        if(!IsOracle)103

 
         {
{104
 strVal = "'" + obj + "'";
            strVal = "'" + obj + "'";105
 }
        }106
 else
        else107

 
         {
{108
 strVal = string.Format("to_date('{0}','yyyy-mm-dd hh24:mi:ss')"
            strVal = string.Format("to_date('{0}','yyyy-mm-dd hh24:mi:ss')"109
 ,Convert.ToDateTime(obj).ToString("yyyy-MM-dd HH:mm:ss"));
            ,Convert.ToDateTime(obj).ToString("yyyy-MM-dd HH:mm:ss"));110
 }
        }111
 break;
        break;112
 
        113
 case DbType.Boolean:
        case DbType.Boolean:114
 if(obj == Convert.DBNull)
            if(obj == Convert.DBNull)115

 
             {
{116
 strVal = "0";
                strVal = "0";117
 }
            }118
 else
            else119

 
             {
{120
 if(Convert.ToBoolean(obj))
                if(Convert.ToBoolean(obj))121

 
                 {
{122
 strVal = "1";
                    strVal = "1";123
 }
                }124
 else
                else125

 
                 {
{126
 strVal = "0";
                    strVal = "0";127
 }
                }128
 }
            }129
 break;
            break;130

 /**//* case DbType.DateTime:
        /**//* case DbType.DateTime:131
 strVal = "('" + obj + "','yyyy-mm-dd HH24:MI:SS')";
             strVal = "('" + obj + "','yyyy-mm-dd HH24:MI:SS')";132
 break;*/
             break;*/133
 default:
         default:134
 strVal = "'" + obj + "'";
             strVal = "'" + obj + "'";135
 break;
             break;136
 }
     }137
 if (SourceTableData.Rows[intRow][intCol]==DBNull.Value)
     if (SourceTableData.Rows[intRow][intCol]==DBNull.Value)138
 strVal = "null";
         strVal = "null";139
 return strVal;
     return strVal;140
 }
 }141
 #endregion
 #endregion142
 
 143
 public string GetTableOwner()
 public string GetTableOwner()144

 
  {
{145
 return GetTableOwner(true);
     return GetTableOwner(true);146
 }
 }147
 
 148
 public string GetTableOwner(bool includeDot)
 public string GetTableOwner(bool includeDot)149

 
  {
{150
 if (SourceTable.Owner.Length > 0&&!IsOracle)
     if (SourceTable.Owner.Length > 0&&!IsOracle)151

 
      {
{152
 return  SourceTable.Owner + ".";
         return  SourceTable.Owner + ".";153
 }
     }154
 else
     else155

 
      {
{156
 return "";
         return "";157
 }
     }158
 }
 }159
 
 160
 </script>
</script> 
                    
                     
                    
                 
                    
                 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号