如何从SQLServer类型转换成Oracle对应的数据类型

C#代码
/// <summary>
        
/// 从 ColumnSchemaRow 获取Oracle  数据类型。
        
/// </summary>

        private static string GetSqlOracleDataType(DataRow columnSchemaRow)
        
{
            Type type 
= columnSchemaRow["DataType"as Type;
            
string len = columnSchemaRow["ColumnSize"].ToString();
            
string dataType = GetSqlType(type);
            
return  TransformType(dataType, len);
            
        }

        
/// <summary>
        
/// 从 .NET 数据类型获取对应的 SQL Server 类型名称。
        
/// </summary>

        private static string GetSqlType(Type systemType)
        
{
            
string typeName = systemType.ToString();
            
switch (typeName)
            
{
                
case "System.Boolean":
                    
return "bit";
                
case "System.Byte":
                    
return "tinyint";
                
case "System.Byte[]":
                    
return "image";
                
case "System.DateTime":
                    
return "datetime";
                
case "System.Decimal":
                    
return "numeric";
                
case "System.Double":
                    
return "float";
                
case "System.Guid":
                    
return "uniqueidentifier";
                
case "System.Int16":
                    
return "smallint";
                
case "System.Int32":
                    
return "integer";
                
case "System.Int64":
                    
return "bigint";
                
case "System.Single":
                    
return "real";
                
case "System.String":
                    
return "nvarchar";
                
default:
                    
throw new ApplicationException(string.Format("找不到 {0} 类型对应的 SQL Server CE 数据类型。", typeName));
            }

        }

        
/// <summary>
        
/// SQL到ORACLE的类型转换
        
/// </summary>
        
/// <param name="temp"></param>
        
/// <param name="len"></param>
        
/// <returns></returns>

        private static String TransformType(String temp, String len)
        
{
            String str 
= null;
            
if (temp.ToLower().Equals("varchar"))
                str 
= "varchar2(" + len + ")";
            
else if (temp.ToLower().Equals("nvarchar"))
                str 
= "varchar2(" + len + ")";
            
else if (temp.ToLower().Equals("empid"))
                str 
= "char(" + len + ")";
            
else if (temp.ToLower().Equals("id"))
                str 
= "varchar2(" + len + ")";
            
else if (temp.ToLower().Equals("tid"))
                str 
= "varchar2(" + len + ")";
            
else if (temp.ToLower().Equals("char"))
                str 
= "char(" + len + ")";
            
else if (temp.ToLower().Equals("nchar"))
                str 
= "char(" + len + ")";
            
else if (temp.ToLower().Equals("int identity"))
                str 
= "int";
            
else if (temp.ToLower().Equals("bit"))
                str 
= "number(1)";
            
else if (temp.ToLower().Equals("smallint"))
                str 
= "number(5)";
            
else if (temp.ToLower().Equals("tinyint"))
                str 
= "number(3)";
            
else if (temp.ToLower().Equals("money"))
                str 
= "number(11,4)";
            
else if (temp.ToLower().Equals("double"))
                str 
= "number(20,8)";
            
else if (temp.ToLower().Equals("datetime"))
                str 
= "date";
            
else if (temp.ToLower().Equals("varbinary"))
                str 
= "blob";
            
else if (temp.ToLower().Equals("text"))
                str 
= "clob";
            
else if (temp.ToLower().Equals("ntext"))
                str 
= "clob";
            
else if (temp.ToLower().Equals("image"))
                str 
= "blob";
            
else if (temp.ToLower().Equals("float"))
                str 
= "number(9,2)";
            
else
                str 
= temp;
            
return str;
        }


posted on 2008-03-28 09:35  TeeBye  阅读(1947)  评论(0编辑  收藏  举报

导航