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

C# 在System.Data.SqlDbType和Microsoft.SqlServer.Management.Smo.SqlDataType之间转换,c#,sql-server,enums,C#,Sql Server,Enums,给定一个实例,如何将其转换为实例,反之亦然 枚举不匹配 如果名字匹配,可能是这样的吗 System.Data.SqlDbType otherEnumTypeValue = System.Data.SqlDbType.Xml; Microsoft.SqlServer.Management.Smo.SqlDataTypeconverted = (Microsoft.SqlServer.Management.Smo.SqlDataType)Enum.Parse(typeof(M

给定一个实例,如何将其转换为实例,反之亦然

枚举不匹配


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

 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());

如果名字匹配的话,可能是这样的

 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());

使用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和需要特殊处理的结构化,则应该更简单。

使用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和需要特殊处理的结构化方法。

我认为您必须使用切换案例编写自己的两个方法。我认为您必须使用切换案例编写自己的两个方法。谢谢,这将处理核心案例。其余的我需要根据转换的方向来处理。谢谢,这将处理核心案例。其余的我需要根据转换的方向来处理。