将 System.types 转换为 SMO.DataTypes

发布于 2024-07-22 17:41:17 字数 297 浏览 0 评论 0原文

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

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

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

有什么建议或提示吗?

TIA

I have a project that creates a table from a DataTable to a SQL table via SMO.

The datatypes of the columns do not convert currently from System.Type to SMO.DataType.
I can do this via a Case statement but I was hoping for a cleaner solution. Maybe something involving TypeDescriptor.GetConverter(targetDataType).

This works between System.types and SQL.DataTypes but I can't get it to convert to SMO.DataTypes.

Any suggestions or tips?

TIA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别靠近我心 2024-07-29 17:41:17

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

I ended up using a Case statement to handle the conversion. Works ok.

别在捏我脸啦 2024-07-29 17:41:17

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

    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;
    }

i did in this way too.
i did not treat all the cases, i add then when i need it.
my methode is not very clean ...

    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;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文