将System.types转换为SMO.DataTypes

时间:2009-05-29 19:42:26

标签: types smo

我有一个项目,通过SMO从DataTable创建一个表到SQL表。

列的数据类型当前不会从System.Type转换为SMO.DataType。 我可以通过Case声明做到这一点,但我希望有一个更清洁的解决方案。也许是涉及TypeDescriptor.GetConverter(targetDataType)的东西。

这在System.types和SQL.DataTypes之间有效,但我无法将其转换为SMO.DataTypes。

有任何建议或提示吗?

TIA

2 个答案:

答案 0 :(得分:0)

我最终使用Case语句来处理转换。工作正常。

答案 1 :(得分:-1)

我也是这样做的。 我没有处理所有的情况,我在需要时添加。 我的方法不是很干净......

    public static SqlDbType MappingToSQLType(String CLRTypeName)
    {
        string[] t = CLRTypeName.Split('.');
        for (int i = 0; i <= 31; i++)// there is 31 sqldatatypes
        {
            if (t[1].Equals("Int64") &&
                ((SqlDbType)i).ToString().ToLower().Equals("bigint"))
                return ((SqlDbType)i);
            else if (t[1].Equals("Int32") &&
                ((SqlDbType)i).ToString().ToLower().Equals("int"))
                return ((SqlDbType)i);
            else if (t[1].Equals("Int16") &&
                ((SqlDbType)i).ToString().ToLower().Equals("smallint"))
                return ((SqlDbType)i);
            else if (t[1].Equals("Boolean") &&
                ((SqlDbType)i).ToString().ToLower().Equals("bit"))
                return ((SqlDbType)i);
            else if (t[1].Equals("Double") &&
                ((SqlDbType)i).ToString().ToLower().Equals("float"))
                return ((SqlDbType)i);
            else if (t[1].Equals("Single") &&
                ((SqlDbType)i).ToString().ToLower().Equals("real"))
                return ((SqlDbType)i);
            else if (((SqlDbType)i).ToString().ToLower().Equals(t[1].ToLower()))
                return ((SqlDbType)i);
        }
        return SqlDbType.NVarChar;
    }