Aracılığıyla paylaş


SqlTypes ve DataSet

ADO.NET 2.0, DataSet ad alanı aracılığıyla System.Data.SqlTypes için gelişmiş tür desteği sunar. System.Data.SqlTypes türleri, veri türlerinin SQL Server veritabanındaki veri türleriyle aynı semantiği ve duyarlığı sağlayacak şekilde tasarlanmıştır. System.Data.SqlTypes'daki her veri türü, SQL Server'da aynı temel veri gösterimine sahip eşdeğer bir veri türüne sahiptir.

System.Data.SqlTypes doğrudan DataSet kullanmak, SQL Server veri türleriyle çalışırken çeşitli avantajlar sağlar. System.Data.SqlTypes, SQL Server yerel veri türleriyle aynı semantiği destekler. System.Data.SqlTypes tanımında DataColumn birini belirtmek, ondalık veya sayısal veri türlerini ortak dil çalışma zamanı (CLR) veri türlerinden birine dönüştürürken oluşabilecek duyarlık kaybını ortadan kaldırır.

Örnek

Aşağıdaki örnek, CLR türleri yerine DataTable kullanarak DataColumn veri türlerini açıkça tanımlayan bir System.Data.SqlTypes nesnesi oluşturur. Kod, DataTable SQL Server'daki AdventureWorks veritabanındaki Sales.SalesOrderDetail tablosundaki verilerle doldurur. Konsol penceresinde görüntülenen çıktı, her sütunun veri türünü ve SQL Server'dan alınan değerleri gösterir.

static void GetSqlTypesAW(string connectionString)
{
    // Create a DataTable and specify a SqlType
    // for each column.
    DataTable table = new();
    table.Columns.Add("SalesOrderID", typeof(SqlInt32));
    table.Columns.Add("UnitPrice", typeof(SqlMoney));
    table.Columns.Add("LineTotal", typeof(SqlDecimal));
    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(connectionString))
    {
        const string queryString =
            "SELECT TOP 5 SalesOrderID, UnitPrice, LineTotal, ModifiedDate "
            + "FROM Sales.SalesOrderDetail WHERE LineTotal < @LineTotal";

        // Create the SqlCommand.
        SqlCommand command = new(queryString, connection);

        // Create the SqlParameter and assign a value.
        SqlParameter parameter =
            new("@LineTotal", SqlDbType.Decimal)
            {
                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($" {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();
    }
}
Private Sub GetSqlTypesAW(ByVal connectionString As String)

    ' Create a DataTable and specify the
    ' SqlType for each column.
    Dim table As New DataTable()
    Dim icolumnolumn As DataColumn = _
      table.Columns.Add("SalesOrderID", GetType(SqlInt32))
    Dim priceColumn As DataColumn = _
      table.Columns.Add("UnitPrice", GetType(SqlMoney))
    Dim totalColumn As DataColumn = _
      table.Columns.Add("LineTotal", GetType(SqlDecimal))
    Dim columnModifiedDate As DataColumn = _
      table.Columns.Add("ModifiedDate", GetType(SqlDateTime))

    ' Open a connection to SQL Server and fill the DataTable
    ' with data from the Sales.SalesOrderDetail table
    ' in the AdventureWorks sample database.
    Using connection As New SqlConnection(connectionString)

        Dim queryString As String = _
           "SELECT TOP 5 SalesOrderID, UnitPrice, LineTotal, ModifiedDate " _
           & "FROM Sales.SalesOrderDetail WHERE LineTotal < @LineTotal"

        ' Create the SqlCommand.
        Dim command As SqlCommand = New SqlCommand(queryString, connection)

        ' Create the SqlParameter and assign a value.
        Dim parameter As SqlParameter = _
           New SqlParameter("@LineTotal", SqlDbType.Decimal)
        parameter.Value = 1.5
        command.Parameters.Add(parameter)

        ' Open the connection and load the data.
        connection.Open()
        Dim reader As SqlDataReader = _
           command.ExecuteReader(CommandBehavior.CloseConnection)
        table.Load(reader)

        ' Close the SqlDataReader
        reader.Close()
    End Using

    ' Display the SqlType of each column.
    Dim column As DataColumn
    Console.WriteLine("Data Types:")
    For Each column In table.Columns
        Console.WriteLine(" {0} -- {1}", _
        column.ColumnName, column.DataType.UnderlyingSystemType)
    Next column

    ' Display the value for each row.
    Dim row As DataRow
    Console.WriteLine("Values:")
    For Each 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()
    Next row
End Sub

Ayrıca bkz.

  • SQL Server Veri Türü Eşlemeleri
  • parametreleri ve parametre veri türlerini yapılandırma
  • ADO.NET Genel Bakış