如何从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;
}
/// 从 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;
}