在System.Data.SqlDbType和Microsoft.SqlServer.Management.Smo.SqlDataType之间转换

时间:2011-05-31 23:07:42

标签: c# sql-server enums

鉴于System.Data.SqlDbType的实例,如何将其转换为Microsoft.SqlServer.Management.Smo.SqlDataType的实例,反之亦然?

枚举不匹配。

Comparing enums

2 个答案:

答案 0 :(得分:3)

如果名字匹配,可能是这样吗?

 System.Data.SqlDbType otherEnumTypeValue = System.Data.SqlDbType.Xml;
 Microsoft.SqlServer.Management.Smo.SqlDataTypeconverted = 
         (Microsoft.SqlServer.Management.Smo.SqlDataType)Enum.Parse(typeof(Microsoft.SqlServer.Management.Smo.SqlDataType), otherEnumTypeValue.ToString());

答案 1 :(得分:1)

使用Bala R的枚举解析代码以及针对不支持的转换的特殊情况,从SqlDataType转换为SqlDbType。

private static SqlDbType ConvertSqlTypeEnum(SqlDataType sqlDataType)
        {
            SqlDbType sqlDbType;
            switch (sqlDataType)
            {
                case SqlDataType.UserDefinedType:
                    sqlDbType = System.Data.SqlDbType.Udt;
                    break;
                case SqlDataType.None:
                case SqlDataType.NVarCharMax:
                case SqlDataType.UserDefinedDataType:
                case SqlDataType.VarBinaryMax:
                case SqlDataType.VarCharMax:
                case SqlDataType.SysName:
                case SqlDataType.Numeric:
                case SqlDataType.UserDefinedTableType:
                case SqlDataType.HierarchyId:
                case SqlDataType.Geometry:
                case SqlDataType.Geography:
                    throw new NotSupportedException("Unable to convert to SqlDbType:" + sqlDataType);
                default:
                    sqlDbType = (SqlDbType)Enum.Parse(typeof(SqlDbType), sqlDataType.ToString());
                    break;
            }
            return sqlDbType;
        }

反过来应该更简单,只有Udt和Structured需要特殊处理。