请问System.Data空间下的SqlDbType枚举和System.Data.SqlTypes空间下的类型枚举,它们之间有何区别?
在什么地方用哪中枚举比较好?

解决方案 »

  1.   

    SqlTypes 旨在提供具有与 SQL Server 数据库中的数据类型相同的语义和精度的数据类型。 SqlTypes 中的每个数据类型在 SQL Server 2005 中都具有等效的数据类型,并具有相同的基础数据表示形式。SqlDbType指定要用于 SqlParameter 中的字段和属性的 SQL Server 特定的数据类型。
      

  2.   


    还是有点疑惑,两者都是针对SQL Server 的数据类型,两者是不是可以相互替换?能举个例子吗?
      

  3.   

    在使用 SQL Server 数据类型时,在 DataSet 中直接使用 System.Data.SqlTypes 具有多种优点。System.Data.SqlTypes 支持与 SQL Server 本机数据类型相同的语义。 使用 System.Data.SqlTypes 还可以避免在转换十进制或数值数据类型时可能造成的精度损失。 示例
    以下代码创建 DataTable 对象,使用 System.Data.SqlTypes(而不是 CLR 类型)显式定义 DataColumn 数据类型。 代码用 SQL Server 2005 中 AdventureWorks 数据库的 Sales.SalesOrderDetail 表中的数据填充 DataTable。 
    static private void GetSqlTypesAW(string connectionString)
    {
        // Create a DataTable and specify a SqlType
        // for each column.
        DataTable table = new DataTable();
        DataColumn icolumnolumn =
            table.Columns.Add("SalesOrderID", typeof(SqlInt32));
        DataColumn priceColumn =
            table.Columns.Add("UnitPrice", typeof(SqlMoney));
        DataColumn totalColumn =
            table.Columns.Add("LineTotal", typeof(SqlDecimal));
        DataColumn columnModifiedDate =
            table.Columns.Add("ModifiedDate", typeof(SqlDateTime));    // Open a connection to SQL Server and fill the DataTable
        // with data from the Sales.SalesOrderDetail table
        // in the AdventureWorks sample database.
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            string queryString =
                "SELECT TOP 5 SalesOrderID, UnitPrice, LineTotal, ModifiedDate "
                + "FROM Sales.SalesOrderDetail WHERE LineTotal < @LineTotal";        // Create the SqlCommand.
            SqlCommand command = new SqlCommand(queryString, connection);        // Create the SqlParameter and assign a value.
            SqlParameter parameter =
                new SqlParameter("@LineTotal", SqlDbType.Decimal);
            parameter.Value = 1.5;
            command.Parameters.Add(parameter);        // Open the connection and load the data.
            connection.Open();
            SqlDataReader reader =
                command.ExecuteReader(CommandBehavior.CloseConnection);
            table.Load(reader);        // Close the SqlDataReader.
            reader.Close();
        }    // Display the SqlType of each column.
        Console.WriteLine("Data Types:");
        foreach (DataColumn column in table.Columns)
        {
            Console.WriteLine(" {0} -- {1}",
                column.ColumnName, column.DataType.UnderlyingSystemType);
        }    // Display the value for each row.
        Console.WriteLine("Values:");
        foreach (DataRow row in table.Rows)
        {
            Console.Write(" {0}, ", row["SalesOrderID"]);
            Console.Write(" {0}, ", row["UnitPrice"]);
            Console.Write(" {0}, ", row["LineTotal"]);
            Console.Write(" {0} ", row["ModifiedDate"]);
            Console.WriteLine();
        }
    }控制台窗口中显示的输出显示每个列的数据类型以及从 SQL Server 检索的值。
      

  4.   

    SqlDbType 枚举指定要用于 SqlParameter 中的字段和属性的 SQL Server 特定的数据类型。
      

  5.   

    谢谢我把上面的语句换成: SqlParameter parameter = new SqlParameter("@LineTotal", new SqlDecimal());
    也可以运行,我可不可以认为System.Data.SqlTypes下的成员可以完全取代SqlDbType下的枚举 ?
      

  6.   

    SqlTypes 中的每个数据类型在 SQL Server 中具有其等效的数据类型(具有相同的基础数据表示形式)。很多数据类型在 CLR 中也有等效数据类型。但是,SqlDateTime、SqlDecimal 和 SqlString 具有与它们对应的 .NET Framework 数据类型不同的基础数据结构。 
      

  7.   

    thanks for your sharing