【问题标题】:SQL Server to .Net type conversionsSQL Server 到 .Net 类型的转换
【发布时间】:2012-02-08 22:56:33
【问题描述】:

我有以下映射,用于在 SQL Server 类型、SQLData 类型和 .NET 类型之间进行转换:

/// <summary>
    /// The map of types. THis maps all the corresponding types between sql server types, .net sql types, and .net types
    /// </summary>
    public static List<SqlTypeConversionHolder> TypeList = new List<SqlTypeConversionHolder>()
    {
        new SqlTypeConversionHolder("bigint", typeof(SqlInt64),typeof(Int64)),
        new SqlTypeConversionHolder("binary", typeof(SqlBytes),typeof(Byte[])),
        new SqlTypeConversionHolder("bit", typeof(SqlBoolean),typeof(Boolean)),
        new SqlTypeConversionHolder("char", typeof(SqlChars),typeof(char)), //this one may need work
        new SqlTypeConversionHolder("cursor", null,null),
        new SqlTypeConversionHolder("date", typeof(SqlDateTime),typeof(DateTime)),
        new SqlTypeConversionHolder("datetime", typeof(SqlDateTime),typeof(DateTime)),
        new SqlTypeConversionHolder("datetime2", null,typeof(DateTime)),
        new SqlTypeConversionHolder("DATETIMEOFFSET", null,typeof(DateTimeOffset)),
        new SqlTypeConversionHolder("decimal", typeof(SqlDecimal),typeof(Decimal)),
        new SqlTypeConversionHolder("float", typeof(SqlDouble),typeof(Double)),
        //new SqlTypeConversionHolder("geography", typeof(SqlGeography),typeof(null));
        //new SqlTypeConversionHolder("geometry", typeof(SqlGeometry),typeof(null));
        //new SqlTypeConversionHolder("hierarchyid", typeof(SqlHierarchyId),typeof(null));
        new SqlTypeConversionHolder("image", null,null),
        new SqlTypeConversionHolder("int", typeof(SqlInt32),typeof(Int32)),
        new SqlTypeConversionHolder("money", typeof(SqlMoney),typeof(Decimal)),
        new SqlTypeConversionHolder("nchar", typeof(SqlChars),typeof(String)),
        new SqlTypeConversionHolder("ntext", null,null),
        new SqlTypeConversionHolder("numeric", typeof(SqlDecimal),typeof(Decimal)),
        new SqlTypeConversionHolder("nvarchar", typeof(SqlChars),typeof(String)),
        new SqlTypeConversionHolder("nvarchar(1)", typeof(SqlChars),typeof(Char)),
        new SqlTypeConversionHolder("nchar(1)", typeof(SqlChars),typeof(Char)),
        new SqlTypeConversionHolder("real", typeof(SqlSingle),typeof(Single)),
        new SqlTypeConversionHolder("rowversion", null,typeof(Byte[])),
        new SqlTypeConversionHolder("smallint", typeof(SqlInt16),typeof(Int16)),
        new SqlTypeConversionHolder("smallmoney", typeof(SqlMoney),typeof(Decimal)),
        new SqlTypeConversionHolder("sql_variant", null,typeof(Object)),
        new SqlTypeConversionHolder("table", null,null),
        new SqlTypeConversionHolder("text", typeof(SqlString),typeof(string)), //this one may need work
        new SqlTypeConversionHolder("time", null,typeof(TimeSpan)),
        new SqlTypeConversionHolder("timestamp", null,null),
        new SqlTypeConversionHolder("tinyint", typeof(SqlByte),typeof(Byte)),
        new SqlTypeConversionHolder("uniqueidentifier", typeof(SqlGuid),typeof(Guid)),
        new SqlTypeConversionHolder("varbinary", typeof(SqlBytes),typeof(Byte[])),
        new SqlTypeConversionHolder("varbinary(1)", typeof(SqlBytes),typeof(byte)),
        new SqlTypeConversionHolder("binary(1)", typeof(SqlBytes),typeof(byte)),
        new SqlTypeConversionHolder("varchar", typeof(SqlString),typeof(string)), //this one may need work
        new SqlTypeConversionHolder("xml", typeof(SqlXml),typeof(string))
    };

SqlTypeConversionHolder 的第一个参数是 sql server 类型的名称。第二个参数是 .Net Sql 类型。第三种是.net类型。

This one may need work 的那些是我不确定的。有人可以就正确的转换提供一些帮助吗?在 MSDN 上查看,似乎他们没有正确的转换类型。我觉得这很难相信。从 SQL Server 类型到 .NET 类型必须有某种方法。

【问题讨论】:

    标签: .net sql-server types sqldatatypes type-conversion


    【解决方案1】:

    根据 MSDN,您的三个(char、varchar、text)都正确。

    见:http://msdn.microsoft.com/en-us/library/system.data.sqltypes.aspx

    【讨论】:

      【解决方案2】:

      无论如何还要为 SQL 2008 添加一个 表转换为数据表

      我在这里举例说明如何使用这种类型SQL Server stored procedure convert varchar to int

      [编辑]

              char is not the correct .NET data type for a SQL Server char. 
          It must be converted to either char[] or string,
       since a SQL char can hold more than one character.
      

      感谢@RedFilter 的那个

      【讨论】:

        【解决方案3】:

        char 不是 SQL Server char 的正确 .NET 数据类型。它必须转换为char[]string,因为SQL char 可以包含多个字符。

        微软参考here 同意我的看法。其他的看起来是正确的。

        【讨论】:

          猜你喜欢
          • 2017-03-03
          • 2019-06-03
          • 1970-01-01
          • 1970-01-01
          • 2012-06-26
          • 2014-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多