2

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

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

这适用于 System.types 和 SQL.DataTypes,但我无法将其转换为 SMO.DataTypes。

有什么建议或提示吗?

TIA

4

2 回答 2

0

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

于 2009-07-16T20:09:52.543 回答
-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;
    }
于 2009-08-19T12:31:56.017 回答