Aracılığıyla paylaş


DataTable.Load Yöntem

Tanım

Sağlanan IDataReaderkullanarak bir DataTable veri kaynağındaki değerlerle doldurur. DataTable zaten satırları içeriyorsa, veri kaynağından gelen veriler mevcut satırlarla birleştirilir.

Aşırı Yüklemeler

Load(IDataReader)

Sağlanan IDataReaderkullanarak bir DataTable veri kaynağındaki değerlerle doldurur. DataTable zaten satırları içeriyorsa, veri kaynağından gelen veriler var olan satırlarla birleştirilir.

Load(IDataReader, LoadOption)

Sağlanan IDataReaderkullanarak bir DataTable veri kaynağındaki değerlerle doldurur. DataTable zaten satırları içeriyorsa, veri kaynağından gelen veriler parametresinin değerine loadOption göre mevcut satırlarla birleştirilir.

Load(IDataReader, LoadOption, FillErrorEventHandler)

DataTable Hata işleme temsilcisi kullanılarak sağlanan IDataReader öğesini kullanarak bir veri kaynağındaki değerlerle doldurur.

Örnekler

Aşağıdaki örnekte yöntemini çağırmayla ilgili sorunların birkaçı gösterilmektedir Load . İlk olarak, örnek yüklenen IDataReaderdosyasından bir şema çıkarsama ve uyumsuz şemaları ve eksik veya ek sütunları olan şemaları işleme dahil olmak üzere şema sorunlarına odaklanır. Örnek daha sonra çeşitli yükleme seçeneklerinin işlenmesi de dahil olmak üzere veri sorunlarına odaklanır.

Not

Bu örnekte aşırı yüklenmiş sürümlerinden birinin nasıl kullanılacağı gösterilmektedir Load. Kullanılabilir diğer örnekler için tek tek aşırı yükleme konulara bakın.

static void Main()
{
    // This example examines a number of scenarios involving the
    // DataTable.Load method.
    Console.WriteLine("Load a DataTable and infer its schema:");

    // The table has no schema. The Load method will infer the
    // schema from the IDataReader:
    DataTable table = new DataTable();

    // Retrieve a data reader, based on the Customers data. In
    // an application, this data might be coming from a middle-tier
    // business object:
    DataTableReader reader = new DataTableReader(GetCustomers());

    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Load a DataTable from an incompatible IDataReader:");

    // Create a table with a single integer column. Attempt
    // to load data from a reader with a schema that is
    // incompatible. Note the exception, determined
    // by the particular incompatibility:
    table = GetIntegerTable();
    reader = new DataTableReader(GetStringTable());
    try
    {
        table.Load(reader);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.GetType().Name + ":" + ex.Message);
    }

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has extra columns:");

    // Note that loading a reader with extra columns adds
    // the columns to the existing table, if possible:
    table = GetIntegerTable();
    reader = new DataTableReader(GetCustomers());
    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has missing columns:");

    // Note that loading a reader with missing columns causes
    // the columns to be filled with null data, if possible:
    table = GetCustomers();
    reader = new DataTableReader(GetIntegerTable());
    table.Load(reader);
    PrintColumns(table);

    // Demonstrate the various possibilites when loading data into
    // a DataTable that already contains data.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Demonstrate data considerations:");
    Console.WriteLine("Current value, Original value, (RowState)");
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Original table:");

    table = SetupModifiedRows();
    DisplayRowState(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Data in IDataReader to be loaded:");
    DisplayRowState(GetChangedCustomers());

    PerformDemo(LoadOption.OverwriteChanges);
    PerformDemo(LoadOption.PreserveChanges);
    PerformDemo(LoadOption.Upsert);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void DisplayRowState(DataTable table)
{
    for (int i = 0; i <= table.Rows.Count - 1; i++)
    {
        object current = "--";
        object original = "--";
        DataRowState rowState = table.Rows[i].RowState;

        // Attempt to retrieve the current value, which doesn't exist
        // for deleted rows:
        if (rowState != DataRowState.Deleted)
        {
            current = table.Rows[i]["Name", DataRowVersion.Current];
        }

        // Attempt to retrieve the original value, which doesn't exist
        // for added rows:
        if (rowState != DataRowState.Added)
        {
            original = table.Rows[i]["Name", DataRowVersion.Original];
        }
        Console.WriteLine("{0}: {1}, {2} ({3})", i, current,
            original, rowState);
    }
}

private static DataTable GetChangedCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "XXX" });
    table.Rows.Add(new object[] { 1, "XXX" });
    table.Rows.Add(new object[] { 2, "XXX" });
    table.Rows.Add(new object[] { 3, "XXX" });
    table.Rows.Add(new object[] { 4, "XXX" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "Mary" });
    table.Rows.Add(new object[] { 1, "Andy" });
    table.Rows.Add(new object[] { 2, "Peter" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 4 });
    table.Rows.Add(new object[] { 5 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.AcceptChanges();
    return table;
}

private static void PerformDemo(LoadOption optionForLoad)
{

    // Load data into a DataTable, retrieve a DataTableReader containing
    // different data, and call the Load method. Depending on the
    // LoadOption value passed as a parameter, this procedure displays
    // different results in the DataTable.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("table.Load(reader, {0})", optionForLoad);
    Console.WriteLine(" ============================= ");

    DataTable table = SetupModifiedRows();
    DataTableReader reader = new DataTableReader(GetChangedCustomers());
    table.RowChanging +=new DataRowChangeEventHandler(HandleRowChanging);

    table.Load(reader, optionForLoad);
    Console.WriteLine();
    DisplayRowState(table);
}

private static void PrintColumns(DataTable table)
{
    // Loop through all the rows in the DataTableReader
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTable SetupModifiedRows()
{
    // Fill a DataTable with customer info, and
    // then modify, delete, and add rows.

    DataTable table = GetCustomers();
    // Row 0 is unmodified.
    // Row 1 is modified.
    // Row 2 is deleted.
    // Row 3 is added.
    table.Rows[1]["Name"] = "Sydney";
    table.Rows[2].Delete();
    DataRow row = table.NewRow();
    row["ID"] = 3;
    row["Name"] = "Melony";
    table.Rows.Add(row);

    // Note that the code doesn't call
    // table.AcceptChanges()
    return table;
}

static void HandleRowChanging(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine(
        "RowChanging event: ID = {0}, action = {1}", e.Row["ID"],
        e.Action);
}
Sub Main()
  Dim table As New DataTable()

  ' This example examines a number of scenarios involving the 
  ' DataTable.Load method.
  Console.WriteLine("Load a DataTable and infer its schema:")

  ' Retrieve a data reader, based on the Customers data. In
  ' an application, this data might be coming from a middle-tier
  ' business object:
  Dim reader As New DataTableReader(GetCustomers())

  ' The table has no schema. The Load method will infer the 
  ' schema from the IDataReader:
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Load a DataTable from an incompatible IDataReader:")

  ' Create a table with a single integer column. Attempt
  ' to load data from a reader with a schema that is 
  ' incompatible. Note the exception, determined
  ' by the particular incompatibility:
  table = GetIntegerTable()
  reader = New DataTableReader(GetStringTable())
  Try
    table.Load(reader)
  Catch ex As Exception
    Console.WriteLine(ex.GetType.Name & ":" & ex.Message())
  End Try

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has extra columns:")

  ' Note that loading a reader with extra columns adds
  ' the columns to the existing table, if possible:
  table = GetIntegerTable()
  reader = New DataTableReader(GetCustomers())
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has missing columns:")

  ' Note that loading a reader with missing columns causes 
  ' the columns to be filled with null data, if possible:
  table = GetCustomers()
  reader = New DataTableReader(GetIntegerTable())
  table.Load(reader)
  PrintColumns(table)

  ' Demonstrate the various possibilites when loading data into
  ' a DataTable that already contains data.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Demonstrate data considerations:")
  Console.WriteLine("Current value, Original value, (RowState)")
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Original table:")

  table = SetupModifiedRows()
  DisplayRowState(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Data in IDataReader to be loaded:")
  DisplayRowState(GetChangedCustomers())

  PerformDemo(LoadOption.OverwriteChanges)
  PerformDemo(LoadOption.PreserveChanges)
  PerformDemo(LoadOption.Upsert)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub DisplayRowState(ByVal table As DataTable)
  For i As Integer = 0 To table.Rows.Count - 1
    Dim current As Object = "--"
    Dim original As Object = "--"
    Dim rowState As DataRowState = table.Rows(i).RowState

    ' Attempt to retrieve the current value, which doesn't exist
    ' for deleted rows:
    If rowState <> DataRowState.Deleted Then
      current = table.Rows(i)("Name", DataRowVersion.Current)
    End If

    ' Attempt to retrieve the original value, which doesn't exist
    ' for added rows:
    If rowState <> DataRowState.Added Then
      original = table.Rows(i)("Name", DataRowVersion.Original)
    End If
    Console.WriteLine("{0}: {1}, {2} ({3})", i, current, original, rowState)
  Next
End Sub

Private Function GetChangedCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "XXX"})
  table.Rows.Add(New Object() {1, "XXX"})
  table.Rows.Add(New Object() {2, "XXX"})
  table.Rows.Add(New Object() {3, "XXX"})
  table.Rows.Add(New Object() {4, "XXX"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "Mary"})
  table.Rows.Add(New Object() {1, "Andy"})
  table.Rows.Add(New Object() {2, "Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {4})
  table.Rows.Add(New Object() {5})
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PerformDemo(ByVal optionForLoad As LoadOption)

  ' Load data into a DataTable, retrieve a DataTableReader containing
  ' different data, and call the Load method. Depending on the
  ' LoadOption value passed as a parameter, this procedure displays
  ' different results in the DataTable.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("table.Load(reader, {0})", optionForLoad)
  Console.WriteLine(" ============================= ")

  Dim table As DataTable = SetupModifiedRows()
  Dim reader As New DataTableReader(GetChangedCustomers())
  AddHandler table.RowChanging, New _
      DataRowChangeEventHandler(AddressOf HandleRowChanging)

  table.Load(reader, optionForLoad)
  Console.WriteLine()
  DisplayRowState(table)
End Sub

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

Private Function SetupModifiedRows() As DataTable
  ' Fill a DataTable with customer info, and 
  ' then modify, delete, and add rows.

  Dim table As DataTable = GetCustomers()
  ' Row 0 is unmodified.
  ' Row 1 is modified.
  ' Row 2 is deleted.
  ' Row 3 is added.
  table.Rows(1)("Name") = "Sydney"
  table.Rows(2).Delete()
  Dim row As DataRow = table.NewRow
  row("ID") = 3
  row("Name") = "Melony"
  table.Rows.Add(row)

  ' Note that the code doesn't call
  ' table.AcceptChanges()
  Return table
End Function

Private Sub HandleRowChanging(ByVal sender As Object, _
  ByVal e As System.Data.DataRowChangeEventArgs)
  Console.WriteLine( _
      "RowChanging event: ID = {0}, action = {1}", e.Row("ID"), _
      e.Action)
End Sub

Açıklamalar

Load yöntemi, belirli bir veri kaynağından veri alma ve geçerli veri kapsayıcısına ekleme (bu örnekte, bir DataTable) etrafında ortalanmış birçok yaygın senaryoda kullanılabilir. Bu senaryolar, güncelleştirme ve birleştirme davranışını açıklayan bir DataTableiçin standart kullanımı açıklar.

Tek DataTable bir birincil veri kaynağıyla eşitlenir veya güncelleştirilir. Değişiklikleri DataTable izler ve birincil veri kaynağıyla eşitlemeye izin verir. Ayrıca, bir DataTable veya daha fazla ikincil veri kaynağından artımlı verileri kabul edebilir. DataTable, ikincil veri kaynağıyla eşitlemeye izin vermek için değişiklikleri izlemekle sorumlu değildir.

Bu iki kuramsal veri kaynağı söz konusu olduğunda, bir kullanıcının muhtemelen aşağıdaki davranışlardan birini yapması gerekir:

  • Birincil veri kaynağından başlatın DataTable . Bu senaryoda, kullanıcı birincil veri kaynağındaki değerlerle boş DataTable bir başlatma yapmak istiyor. Daha sonra kullanıcı değişiklikleri tekrar birincil veri kaynağına yaymayı amaçlar.

  • Değişiklikleri koruyun ve birincil veri kaynağından tekrar eşitleyin. Bu senaryoda, kullanıcı önceki senaryodaki DataTable doldurulmuş değerini almak ve birincil veri kaynağıyla artımlı eşitleme gerçekleştirmek ve içinde DataTableyapılan değişiklikleri korumak istiyor.

  • İkincil veri kaynaklarından artımlı veri akışı. Bu senaryoda, kullanıcı bir veya daha fazla ikincil veri kaynağından değişiklikleri birleştirmek ve bu değişiklikleri tekrar birincil veri kaynağına yaymak istiyor.

Load yöntemi tüm bu senaryoları mümkün kılar. Bu yöntemin aşırı yüklemelerinden biri dışında tümü, zaten bir içindeki satırların yüklenen satırlarla nasıl birleştiğini belirten bir DataTable yükleme seçeneği parametresi belirtmenize olanak tanır. (Davranışı belirtmenize izin vermeyen aşırı yükleme varsayılan yükleme seçeneğini kullanır.) Aşağıdaki tabloda, sabit listesi tarafından LoadOption sağlanan üç yükleme seçeneği açıklanmaktadır. Her durumda; açıklama, gelen verilerdeki bir satırın birincil anahtarı varolan bir satırın birincil anahtarıyla eşleştiğinde görülen çalışma biçimini belirtir.

Yükleme Seçeneği Description
PreserveChanges (varsayılan) Satır özgün sürümünü gelen satırın değeriyle güncelleştirir.
OverwriteChanges Satırın geçerli ve özgün sürümlerini gelen satırın değeriyle güncelleştirir.
Upsert Satırın geçerli sürümünü gelen satırın değeriyle güncelleştirir.

Genel olarak ve OverwriteChanges seçenekleri, PreserveChanges kullanıcının ve değişikliklerini birincil veri kaynağıyla eşitlemesi DataSet gereken senaryolara yöneliktir. bu Upsert seçenek, bir veya daha fazla ikincil veri kaynağından yapılan değişiklikleri toplamayı kolaylaştırır.

Load(IDataReader)

Kaynak:
DataTable.cs
Kaynak:
DataTable.cs
Kaynak:
DataTable.cs

Sağlanan IDataReaderkullanarak bir DataTable veri kaynağındaki değerlerle doldurur. DataTable zaten satırları içeriyorsa, veri kaynağından gelen veriler var olan satırlarla birleştirilir.

public:
 void Load(System::Data::IDataReader ^ reader);
public void Load (System.Data.IDataReader reader);
member this.Load : System.Data.IDataReader -> unit
Public Sub Load (reader As IDataReader)

Parametreler

reader
IDataReader

Sonuç IDataReader kümesi sağlayan.

Örnekler

Aşağıdaki örnekte yöntemini çağırmayla ilgili sorunların birkaçı gösterilmektedir Load . İlk olarak, örnek yüklenen IDataReaderdosyasından bir şema çıkarsama ve uyumsuz şemaları ve eksik veya ek sütunları olan şemaları işleme dahil olmak üzere şema sorunlarına odaklanır. Örnek daha sonra, verileri yükleme işleminden Load önce ve sonra görüntüleyerek yöntemini çağırır.

static void Main()
{
    // This example examines a number of scenarios involving the
    // DataTable.Load method.
    Console.WriteLine("Load a DataTable and infer its schema:");

    // The table has no schema. The Load method will infer the
    // schema from the IDataReader:
    DataTable table = new DataTable();

    // Retrieve a data reader, based on the Customers data. In
    // an application, this data might be coming from a middle-tier
    // business object:
    DataTableReader reader = new DataTableReader(GetCustomers());

    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable from an incompatible IDataReader:");

    // Create a table with a single integer column. Attempt
    // to load data from a reader with a schema that is
    // incompatible. Note the exception, determined
    // by the particular incompatibility:
    table = GetIntegerTable();
    reader = new DataTableReader(GetStringTable());
    try
    {
        table.Load(reader);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.GetType().Name + ":" + ex.Message);
    }

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has extra columns:");

    // Note that loading a reader with extra columns adds
    // the columns to the existing table, if possible:
    table = GetIntegerTable();
    reader = new DataTableReader(GetCustomers());
    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has missing columns:");

    // Note that loading a reader with missing columns causes
    // the columns to be filled with null data, if possible:
    table = GetCustomers();
    reader = new DataTableReader(GetIntegerTable());
    table.Load(reader);
    PrintColumns(table);

    // Demonstrate the various possibilites when loading data
    // into a DataTable that already contains data.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Demonstrate data considerations:");
    Console.WriteLine("Current value, Original value, (RowState)");
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Original table:");

    table = SetupModifiedRows();
    DisplayRowState(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Data in IDataReader to be loaded:");
    DisplayRowState(GetChangedCustomers());

    // Load data into a DataTable, retrieve a DataTableReader
    // containing different data, and call the Load method.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("table.Load(reader)");
    Console.WriteLine(" ============================= ");

    table = SetupModifiedRows();
    reader = new DataTableReader(GetChangedCustomers());
    table.Load(reader);
    DisplayRowState(table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void DisplayRowState(DataTable table)
{
    for (int i = 0; i <= table.Rows.Count - 1; i++)
    {
        object current = "--";
        object original = "--";
        DataRowState rowState = table.Rows[i].RowState;

        // Attempt to retrieve the current value, which doesn't exist
        // for deleted rows:
        if (rowState != DataRowState.Deleted)
        {
            current = table.Rows[i]["Name", DataRowVersion.Current];
        }

        // Attempt to retrieve the original value, which doesn't exist
        // for added rows:
        if (rowState != DataRowState.Added)
        {
            original = table.Rows[i]["Name", DataRowVersion.Original];
        }
        Console.WriteLine("{0}: {1}, {2} ({3})", i,
            current, original, rowState);
    }
}

private static DataTable GetChangedCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "XXX" });
    table.Rows.Add(new object[] { 2, "XXX" });
    table.Rows.Add(new object[] { 3, "XXX" });
    table.Rows.Add(new object[] { 4, "XXX" });
    table.Rows.Add(new object[] { 5, "XXX" });
    table.Rows.Add(new object[] { 6, "XXX" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 1, "Mary" });
    table.Rows.Add(new object[] { 2, "Andy" });
    table.Rows.Add(new object[] { 3, "Peter" });
    table.Rows.Add(new object[] { 4, "Russ" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 5 });
    table.Rows.Add(new object[] { 6 });
    table.Rows.Add(new object[] { 7 });
    table.Rows.Add(new object[] { 8 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID",
        typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.Rows.Add(new object[] { "Russ" });
    table.AcceptChanges();
    return table;
}

private static void PrintColumns(DataTable table)
{
    // Loop through all the rows in the DataTableReader
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTable SetupModifiedRows()
{
    // Fill a DataTable with customer info, and
    // then modify, delete, and add rows.

    DataTable table = GetCustomers();
    // Row 0 is unmodified.
    // Row 1 is modified.
    // Row 2 is deleted.
    // Row 5 is added.
    table.Rows[1]["Name"] = "Sydney";
    table.Rows[2].Delete();
    DataRow row = table.NewRow();
    row["ID"] = 5;
    row["Name"] = "Melony";
    table.Rows.Add(row);

    // Note that the code doesn't call
    // table.AcceptChanges()
    return table;
}
Sub Main()
  ' This example examines a number of scenarios involving the 
  ' DataTable.Load method.
  Console.WriteLine("Load a DataTable and infer its schema:")

  ' The table has no schema. The Load method will infer the 
  ' schema from the IDataReader:
  Dim table As New DataTable()

  ' Retrieve a data reader, based on the Customers data. In
  ' an application, this data might be coming from a middle-tier
  ' business object:
  Dim reader As New DataTableReader(GetCustomers())

  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable from an incompatible IDataReader:")

  ' Create a table with a single integer column. Attempt
  ' to load data from a reader with a schema that is 
  ' incompatible. Note the exception, determined
  ' by the particular incompatibility:
  table = GetIntegerTable()
  reader = New DataTableReader(GetStringTable())
  Try
    table.Load(reader)
  Catch ex As Exception
    Console.WriteLine(ex.GetType.Name & ":" & ex.Message())
  End Try

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has extra columns:")

  ' Note that loading a reader with extra columns adds
  ' the columns to the existing table, if possible:
  table = GetIntegerTable()
  reader = New DataTableReader(GetCustomers())
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
      Console.WriteLine( _
          "Load a DataTable with an IDataReader that has missing columns:")

  ' Note that loading a reader with missing columns causes 
  ' the columns to be filled with null data, if possible:
  table = GetCustomers()
  reader = New DataTableReader(GetIntegerTable())
  table.Load(reader)
  PrintColumns(table)

  ' Demonstrate the various possibilites when loading data into
  ' a DataTable that already contains data.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Demonstrate data considerations:")
  Console.WriteLine("Current value, Original value, (RowState)")
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Original table:")

  table = SetupModifiedRows()
  DisplayRowState(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Data in IDataReader to be loaded:")
  DisplayRowState(GetChangedCustomers())

  ' Load data into a DataTable, retrieve a DataTableReader 
  ' containing different data, and call the Load method. 
  Console.WriteLine(" ============================= ")
  Console.WriteLine("table.Load(reader)")
  Console.WriteLine(" ============================= ")

  table = SetupModifiedRows()
  reader = New DataTableReader(GetChangedCustomers())
  table.Load(reader)
  DisplayRowState(table)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub DisplayRowState(ByVal table As DataTable)
  For i As Integer = 0 To table.Rows.Count - 1
    Dim current As Object = "--"
    Dim original As Object = "--"
    Dim rowState As DataRowState = table.Rows(i).RowState

    ' Attempt to retrieve the current value, which doesn't exist
    ' for deleted rows:
    If rowState <> DataRowState.Deleted Then
      current = table.Rows(i)("Name", DataRowVersion.Current)
    End If

    ' Attempt to retrieve the original value, which doesn't exist
    ' for added rows:
    If rowState <> DataRowState.Added Then
      original = table.Rows(i)("Name", DataRowVersion.Original)
    End If
    Console.WriteLine("{0}: {1}, {2} ({3})", i, _
      current, original, rowState)
  Next
End Sub

Private Function GetChangedCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "XXX"})
  table.Rows.Add(New Object() {2, "XXX"})
  table.Rows.Add(New Object() {3, "XXX"})
  table.Rows.Add(New Object() {4, "XXX"})
  table.Rows.Add(New Object() {5, "XXX"})
  table.Rows.Add(New Object() {6, "XXX"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {1, "Mary"})
  table.Rows.Add(New Object() {2, "Andy"})
  table.Rows.Add(New Object() {3, "Peter"})
  table.Rows.Add(New Object() {4, "Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {5})
  table.Rows.Add(New Object() {6})
  table.Rows.Add(New Object() {7})
  table.Rows.Add(New Object() {8})
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.Rows.Add(New Object() {"Russ"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

Private Function SetupModifiedRows() As DataTable
  ' Fill a DataTable with customer info, and 
  ' then modify, delete, and add rows.

  Dim table As DataTable = GetCustomers()
  ' Row 0 is unmodified.
  ' Row 1 is modified.
  ' Row 2 is deleted.
  ' Row 5 is added.
  table.Rows(1)("Name") = "Sydney"
  table.Rows(2).Delete()
  Dim row As DataRow = table.NewRow
  row("ID") = 5
  row("Name") = "Melony"
  table.Rows.Add(row)

  ' Note that the code doesn't call
  ' table.AcceptChanges()
  Return table
End Function

Açıklamalar

Load yöntemi, yüklenen IDataReader'den ilk sonuç kümesini kullanır ve başarıyla tamamlandıktan sonra okuyucunun konumunu varsa sonraki sonuç kümesine ayarlar. Yöntemi, Load verileri dönüştürürken yöntemiyle aynı dönüştürme kurallarını DbDataAdapter.Fill kullanır.

yöntemi, Load verileri bir IDataReader örnekten yüklerken karşılaşılan üç özel sorunu dikkate almalıdır: şema, veriler ve olay işlemleri. Şemayla çalışırken yöntemi aşağıdaki Load tabloda açıklandığı gibi koşullarla karşılaşabilir. Şema işlemleri, veri içermeyenler bile tüm içeri aktarılan sonuç kümeleri için gerçekleşir.

Koşul Davranış
şeması DataTable yok. yöntemi, Load içeri aktarılan IDataReaderdosyasından sonuç kümesine göre şemayı çıkarsar.
bir DataTable şemaya sahiptir, ancak yüklenen şemayla uyumsuzdur. yöntemi, Load uyumsuz şemaya veri yüklemeye çalışırken oluşan belirli bir hataya karşılık gelen bir özel durum oluşturur.
Şemalar uyumludur, ancak yüklenen sonuç kümesi şeması içinde DataTablebulunmayan sütunlar içerir. yöntemi, Load şemasına DataTableek sütunlar ekler. ve yüklenen sonuç kümesinde DataTable karşılık gelen sütunlar değer uyumlu değilse yöntemi bir özel durum oluşturur. yöntemi ayrıca eklenen tüm sütunlar için sonuç kümesinden kısıtlama bilgilerini alır. Birincil Anahtar kısıtlaması durumu dışında, bu kısıtlama bilgileri yalnızca geçerli DataTable , yükleme işleminin başlangıcında herhangi bir sütun içermiyorsa kullanılır.
Şemalar uyumludur, ancak yüklenen sonuç kümesi şeması, ' DataTableden daha az sütun içerir. Eksik bir sütunun varsayılan değeri tanımlanmışsa veya sütunun veri türü null atanabilirse, Load yöntemi satırların eklenmesine izin verir ve bu durumda eksik sütun için varsayılan değer veya null değer değiştirilir. Varsayılan değer yoksa veya null kullanılamıyorsa Load , yöntemi bir özel durum oluşturur. Belirli bir varsayılan değer sağlanmamışsa, Load yöntemi değeri zımni varsayılan değer olarak kullanır null .

Yöntemin Load veri işlemleri açısından davranışını dikkate almadan önce, içindeki DataTable her satırın her sütun için hem geçerli değeri hem de özgün değeri koruduğunu düşünün. Bu değerler eşdeğer olabilir veya satırdaki veriler doldurulduktan DataTablesonra değiştirilmişse farklı olabilir. Daha fazla bilgi için bkz. Satır Durumları ve Satır Sürümleri.

Yöntemin Load bu sürümü, her satırdaki geçerli değerleri korumayı dener ve özgün değeri olduğu gibi bırakır. (Gelen verilerin davranışı üzerinde daha ayrıntılı denetim istiyorsanız bkz DataTable.Load. .) Mevcut satır ve gelen satır karşılık gelen birincil anahtar değerleri içeriyorsa, satır geçerli satır durumu değeri kullanılarak işlenir, aksi takdirde yeni satır olarak kabul edilir.

Olay işlemleri açısından olay, RowChanging her satır değiştirilmeden önce gerçekleşir ve RowChanged olay her satır değiştirildikten sonra gerçekleşir. Her durumda, Action olay işleyicisine geçirilen örneğin özelliği DataRowChangeEventArgs , olayla ilişkili belirli eylem hakkında bilgi içerir. Bu eylem değeri, satırın yükleme işleminden önceki durumuna bağlıdır. Her durumda, her iki olay da gerçekleşir ve eylem her biri için aynıdır. Eylem, geçerli satır durumuna bağlı olarak her satırın geçerli veya özgün sürümüne ya da her ikisine de uygulanabilir.

Aşağıdaki tabloda yöntemin Load davranışı görüntülenir. Son satır ("(Mevcut değil)") var olan satırlarla eşleşmeyen gelen satırların davranışını açıklar. Bu tablodaki her hücre, bir satırdaki alanın geçerli ve özgün değerini, yöntemi tamamlandıktan sonra Load değeriyle birlikte DataRowState açıklar. Bu durumda yöntemi, yükleme seçeneğini belirtmenize izin vermez ve varsayılan PreserveChangesolan öğesini kullanır.

Mevcut DataRowState Yöntemden sonraki Load değerler ve olay eylemi
Eklendi Geçerli = <Var Olan>

Özgün = <Gelen>

Durum = <Değiştirildi>

RowAction = ChangeOriginal
Değiştirildi Geçerli = <Var Olan>

Özgün = <Gelen>

Durum = <Değiştirildi>

RowAction = ChangeOriginal
Silindi Geçerli = <Kullanılamıyor>

Özgün = <Gelen>

Durum = <Silindi>

RowAction = ChangeOriginal
Değişme -den Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
(Mevcut değil) Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal

içindeki DataColumn değerler ve AutoIncrementgibi ReadOnly özelliklerin kullanımıyla kısıtlanabilir. yöntemi, Load bu sütunları sütunun özellikleri tarafından tanımlanan davranışla tutarlı bir şekilde işler. üzerindeki DataColumn salt okunur kısıtlaması yalnızca bellekte gerçekleşen değişiklikler için geçerlidir. Gerekirse Load yöntemin salt okunur sütun değerlerinin üzerine yazar.

Yöntem, geçerli satırı gelen satırla karşılaştırmak için birincil anahtar alanının hangi sürümünün kullanılacağını belirlemek için, Load varsa satır içindeki birincil anahtar değerinin özgün sürümünü kullanır. Aksi takdirde, Load yöntemi birincil anahtar alanının geçerli sürümünü kullanır.

Ayrıca bkz.

Şunlara uygulanır

Load(IDataReader, LoadOption)

Kaynak:
DataTable.cs
Kaynak:
DataTable.cs
Kaynak:
DataTable.cs

Sağlanan IDataReaderkullanarak bir DataTable veri kaynağındaki değerlerle doldurur. DataTable zaten satırları içeriyorsa, veri kaynağından gelen veriler parametresinin loadOption değerine göre mevcut satırlarla birleştirilir.

public:
 void Load(System::Data::IDataReader ^ reader, System::Data::LoadOption loadOption);
public void Load (System.Data.IDataReader reader, System.Data.LoadOption loadOption);
member this.Load : System.Data.IDataReader * System.Data.LoadOption -> unit
Public Sub Load (reader As IDataReader, loadOption As LoadOption)

Parametreler

reader
IDataReader

Bir IDataReader veya daha fazla sonuç kümesi sağlayan.

loadOption
LoadOption

numaralandırmasından LoadOption , içinde zaten bulunan DataTable satırların aynı birincil anahtarı paylaşan gelen satırlarla nasıl birleştirildiğini gösteren bir değer.

Örnekler

Aşağıdaki örnekte yöntemini çağırmayla ilgili sorunların birkaçı gösterilmektedir Load . İlk olarak, örnek yüklenen IDataReaderdosyasından bir şema çıkarsama ve uyumsuz şemaları ve eksik veya ek sütunları olan şemaları işleme dahil olmak üzere şema sorunlarına odaklanır. Örnek daha sonra çeşitli yükleme seçeneklerinin işlenmesi de dahil olmak üzere veri sorunlarına odaklanır.

static void Main()
{
    // This example examines a number of scenarios involving the
    // DataTable.Load method.
    Console.WriteLine("Load a DataTable and infer its schema:");

    // The table has no schema. The Load method will infer the
    // schema from the IDataReader:
    DataTable table = new DataTable();

    // Retrieve a data reader, based on the Customers data. In
    // an application, this data might be coming from a middle-tier
    // business object:
    DataTableReader reader = new DataTableReader(GetCustomers());

    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable from an incompatible IDataReader:");

    // Create a table with a single integer column. Attempt
    // to load data from a reader with a schema that is
    // incompatible. Note the exception, determined
    // by the particular incompatibility:
    table = GetIntegerTable();
    reader = new DataTableReader(GetStringTable());
    try
    {
        table.Load(reader);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.GetType().Name + ":" + ex.Message);
    }

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has extra columns:");

    // Note that loading a reader with extra columns adds
    // the columns to the existing table, if possible:
    table = GetIntegerTable();
    reader = new DataTableReader(GetCustomers());
    table.Load(reader);
    PrintColumns(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine(
        "Load a DataTable with an IDataReader that has missing columns:");

    // Note that loading a reader with missing columns causes
    // the columns to be filled with null data, if possible:
    table = GetCustomers();
    reader = new DataTableReader(GetIntegerTable());
    table.Load(reader);
    PrintColumns(table);

    // Demonstrate the various possibilites when loading data into
    // a DataTable that already contains data.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Demonstrate data considerations:");
    Console.WriteLine("Current value, Original value, (RowState)");
    Console.WriteLine(" ============================= ");
    Console.WriteLine("Original table:");

    table = SetupModifiedRows();
    DisplayRowState(table);

    Console.WriteLine(" ============================= ");
    Console.WriteLine("Data in IDataReader to be loaded:");
    DisplayRowState(GetChangedCustomers());

    PerformDemo(LoadOption.OverwriteChanges);
    PerformDemo(LoadOption.PreserveChanges);
    PerformDemo(LoadOption.Upsert);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static void DisplayRowState(DataTable table)
{
    for (int i = 0; i <= table.Rows.Count - 1; i++)
    {
        object current = "--";
        object original = "--";
        DataRowState rowState = table.Rows[i].RowState;

        // Attempt to retrieve the current value, which doesn't exist
        // for deleted rows:
        if (rowState != DataRowState.Deleted)
        {
            current = table.Rows[i]["Name", DataRowVersion.Current];
        }

        // Attempt to retrieve the original value, which doesn't exist
        // for added rows:
        if (rowState != DataRowState.Added)
        {
            original = table.Rows[i]["Name", DataRowVersion.Original];
        }
        Console.WriteLine("{0}: {1}, {2} ({3})", i,
            current, original, rowState);
    }
}

private static DataTable GetChangedCustomers()
{
    // Create sample Customers table.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "XXX" });
    table.Rows.Add(new object[] { 1, "XXX" });
    table.Rows.Add(new object[] { 2, "XXX" });
    table.Rows.Add(new object[] { 3, "XXX" });
    table.Rows.Add(new object[] { 4, "XXX" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetCustomers()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));
    table.Columns.Add("Name", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 0, "Mary" });
    table.Rows.Add(new object[] { 1, "Andy" });
    table.Rows.Add(new object[] { 2, "Peter" });
    table.AcceptChanges();
    return table;
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 4 });
    table.Rows.Add(new object[] { 5 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.AcceptChanges();
    return table;
}

private static void PerformDemo(LoadOption optionForLoad)
{

    // Load data into a DataTable, retrieve a DataTableReader containing
    // different data, and call the Load method. Depending on the
    // LoadOption value passed as a parameter, this procedure displays
    // different results in the DataTable.
    Console.WriteLine(" ============================= ");
    Console.WriteLine("table.Load(reader, {0})", optionForLoad);
    Console.WriteLine(" ============================= ");

    DataTable table = SetupModifiedRows();
    DataTableReader reader = new DataTableReader(GetChangedCustomers());
    table.RowChanging +=new DataRowChangeEventHandler(HandleRowChanging);

    table.Load(reader, optionForLoad);
    Console.WriteLine();
    DisplayRowState(table);
}

private static void PrintColumns(DataTable table)
{
    // Loop through all the rows in the DataTableReader
    foreach (DataRow row in table.Rows)
    {
        for (int i = 0; i < table.Columns.Count; i++)
        {
            Console.Write(row[i] + " ");
        }
        Console.WriteLine();
    }
}

private static DataTable SetupModifiedRows()
{
    // Fill a DataTable with customer info, and
    // then modify, delete, and add rows.

    DataTable table = GetCustomers();
    // Row 0 is unmodified.
    // Row 1 is modified.
    // Row 2 is deleted.
    // Row 3 is added.
    table.Rows[1]["Name"] = "Sydney";
    table.Rows[2].Delete();
    DataRow row = table.NewRow();
    row["ID"] = 3;
    row["Name"] = "Melony";
    table.Rows.Add(row);

    // Note that the code doesn't call
    // table.AcceptChanges()
    return table;
}

static void HandleRowChanging(object sender, DataRowChangeEventArgs e)
{
    Console.WriteLine(
        "RowChanging event: ID = {0}, action = {1}", e.Row["ID"], e.Action);
}
Sub Main()
  Dim table As New DataTable()

  ' This example examines a number of scenarios involving the
  '  DataTable.Load method.
  Console.WriteLine("Load a DataTable and infer its schema:")

  ' Retrieve a data reader, based on the Customers data. In
  ' an application, this data might be coming from a middle-tier
  ' business object:
  Dim reader As New DataTableReader(GetCustomers())

  ' The table has no schema. The Load method will infer the 
  ' schema from the IDataReader:
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable from an incompatible IDataReader:")

  ' Create a table with a single integer column. Attempt
  ' to load data from a reader with a schema that is 
  ' incompatible. Note the exception, determined
  ' by the particular incompatibility:
  table = GetIntegerTable()
  reader = New DataTableReader(GetStringTable())
  Try
    table.Load(reader)
  Catch ex As Exception
    Console.WriteLine(ex.GetType.Name & ":" & ex.Message())
  End Try

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has extra columns:")

  ' Note that loading a reader with extra columns adds
  ' the columns to the existing table, if possible:
  table = GetIntegerTable()
  reader = New DataTableReader(GetCustomers())
  table.Load(reader)
  PrintColumns(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine( _
      "Load a DataTable with an IDataReader that has missing columns:")

  ' Note that loading a reader with missing columns causes 
  ' the columns to be filled with null data, if possible:
  table = GetCustomers()
  reader = New DataTableReader(GetIntegerTable())
  table.Load(reader)
  PrintColumns(table)

  ' Demonstrate the various possibilites when loading data into
  ' a DataTable that already contains data.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Demonstrate data considerations:")
  Console.WriteLine("Current value, Original value, (RowState)")
  Console.WriteLine(" ============================= ")
  Console.WriteLine("Original table:")

  table = SetupModifiedRows()
  DisplayRowState(table)

  Console.WriteLine(" ============================= ")
  Console.WriteLine("Data in IDataReader to be loaded:")
  DisplayRowState(GetChangedCustomers())

  PerformDemo(LoadOption.OverwriteChanges)
  PerformDemo(LoadOption.PreserveChanges)
  PerformDemo(LoadOption.Upsert)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub DisplayRowState(ByVal table As DataTable)
  For i As Integer = 0 To table.Rows.Count - 1
    Dim current As Object = "--"
    Dim original As Object = "--"
    Dim rowState As DataRowState = table.Rows(i).RowState

    ' Attempt to retrieve the current value, which doesn't exist
    ' for deleted rows:
    If rowState <> DataRowState.Deleted Then
      current = table.Rows(i)("Name", DataRowVersion.Current)
    End If

    ' Attempt to retrieve the original value, which doesn't exist
    ' for added rows:
    If rowState <> DataRowState.Added Then
      original = table.Rows(i)("Name", DataRowVersion.Original)
    End If
    Console.WriteLine("{0}: {1}, {2} ({3})", i, _
      current, original, rowState)
  Next
End Sub

Private Function GetChangedCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "XXX"})
  table.Rows.Add(New Object() {1, "XXX"})
  table.Rows.Add(New Object() {2, "XXX"})
  table.Rows.Add(New Object() {3, "XXX"})
  table.Rows.Add(New Object() {4, "XXX"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetCustomers() As DataTable
  ' Create sample Customers table.
  Dim table As New DataTable

  ' Create two columns, ID and Name.
  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))
  table.Columns.Add("Name", GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {0, "Mary"})
  table.Rows.Add(New Object() {1, "Andy"})
  table.Rows.Add(New Object() {2, "Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {4})
  table.Rows.Add(New Object() {5})
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PerformDemo(ByVal optionForLoad As LoadOption)

  ' Load data into a DataTable, retrieve a DataTableReader containing
  ' different data, and call the Load method. Depending on the
  ' LoadOption value passed as a parameter, this procedure displays
  ' different results in the DataTable.
  Console.WriteLine(" ============================= ")
  Console.WriteLine("table.Load(reader, {0})", optionForLoad)
  Console.WriteLine(" ============================= ")

  Dim table As DataTable = SetupModifiedRows()
  Dim reader As New DataTableReader(GetChangedCustomers())
  AddHandler table.RowChanging, New _
      DataRowChangeEventHandler(AddressOf HandleRowChanging)

  table.Load(reader, optionForLoad)
  Console.WriteLine()
  DisplayRowState(table)
End Sub

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

Private Function SetupModifiedRows() As DataTable
  ' Fill a DataTable with customer info, and 
  ' then modify, delete, and add rows.

  Dim table As DataTable = GetCustomers()
  ' Row 0 is unmodified.
  ' Row 1 is modified.
  ' Row 2 is deleted.
  ' Row 3 is added.
  table.Rows(1)("Name") = "Sydney"
  table.Rows(2).Delete()
  Dim row As DataRow = table.NewRow
  row("ID") = 3
  row("Name") = "Melony"
  table.Rows.Add(row)

  ' Note that the code doesn't call
  ' table.AcceptChanges()
  Return table
End Function

Private Sub HandleRowChanging(ByVal sender As Object, _
      ByVal e As System.Data.DataRowChangeEventArgs)
  Console.WriteLine( _
      "RowChanging event: ID = {0}, action = {1}", e.Row("ID"), e.Action)
End Sub

Açıklamalar

Load yöntemi, yüklenen IDataReaderiçinden ilk sonuç kümesini kullanır ve başarıyla tamamlandıktan sonra okuyucunun konumunu varsa sonraki sonuç kümesine ayarlar. Verileri dönüştürürken yöntemi yöntemiyle Load aynı dönüştürme kurallarını Fill kullanır.

Yöntemin Load bir IDataReader örnekten verileri yüklerken karşılaşılan üç özel sorunu hesaba katması gerekir: şema, veriler ve olay işlemleri. Şemayla çalışırken, Load yöntem aşağıdaki tabloda açıklandığı gibi koşullarla karşılaşabilir. Şema işlemleri, veri içermeyenler bile tüm içeri aktarılan sonuç kümeleri için gerçekleşir.

Koşul Davranış
şemasına DataTable sahip değil. yöntemi, Load içeri aktarılan IDataReaderdosyasından sonuç kümesine göre şemayı çıkarsar.
bir DataTable şemaya sahiptir, ancak yüklenen şemayla uyumsuzdur. yöntemi, Load uyumsuz şemaya veri yüklemeye çalışırken oluşan belirli bir hataya karşılık gelen bir özel durum oluşturur.
Şemalar uyumludur, ancak yüklenen sonuç kümesi şemasında DataTablevar olmayan sütunlar bulunur. yöntemi, Load 'nin şemasına DataTableek sütunlar ekler. ve yüklenen sonuç kümesinde DataTable karşılık gelen sütunlar değer uyumlu değilse yöntemi bir özel durum oluşturur. yöntemi ayrıca eklenen tüm sütunlar için sonuç kümesinden kısıtlama bilgilerini alır. Birincil Anahtar kısıtlaması durumu dışında, bu kısıtlama bilgileri yalnızca geçerli DataTable yükleme işleminin başında herhangi bir sütun içermiyorsa kullanılır.
Şemalar uyumludur, ancak yüklenen sonuç kümesi şemasında dosyasından DataTabledaha az sütun vardır. Eksik bir sütunun varsayılan değeri tanımlanmışsa veya sütunun veri türü null atanabilirse yöntemi, Load eksik sütunun varsayılan veya null değerini değiştirerek satırların eklenmesine izin verir. Hiçbir varsayılan değer veya null kullanılamıyorsa, Load yöntem bir özel durum oluşturur. Belirli bir varsayılan değer sağlanmazsa, Load yöntem varsayılan değeri örtük olarak null değerini kullanır.

Veri işlemleri açısından yönteminin Load davranışını dikkate almadan önce, içindeki DataTable her satırın her sütun için hem geçerli değeri hem de özgün değeri koruduğunu düşünün. Bu değerler eşdeğer olabilir veya satırdaki veriler doldurulduktan DataTablesonra değiştirilmişse farklı olabilir. Daha fazla bilgi için bkz. Satır Durumları ve Satır Sürümleri .

Bu yöntem çağrısında, belirtilen LoadOption parametre gelen verilerin işlenmesini etkiler. Load yöntemi, var olan satırlar ile aynı birincil anahtara sahip satırları yüklemeyi nasıl işlemelidir? Geçerli değerleri mi, özgün değerleri mi yoksa her ikisini birden mi değiştirmeli? Bu sorunlar ve daha fazlası parametresi tarafından loadOption denetleniyor.

Mevcut satır ve gelen satır karşılık gelen birincil anahtar değerlerini içeriyorsa, satır geçerli satır durumu değeri kullanılarak işlenir, aksi takdirde yeni satır olarak kabul edilir.

Olay işlemleri açısından, RowChanging olay her satır değiştirilmeden önce gerçekleşir ve RowChanged olay her satır değiştirildikten sonra gerçekleşir. Her durumda, Action olay işleyicisine geçirilen örneğin özelliği DataRowChangeEventArgs , olayla ilişkili belirli eylem hakkında bilgi içerir. Bu eylem değeri, yükleme işleminden önceki satırın durumuna bağlı olarak değişir. Her durumda, her iki olay da gerçekleşir ve eylem her biri için aynıdır. Eylem, geçerli satır durumuna bağlı olarak her satırın geçerli veya özgün sürümüne ya da her ikisine de uygulanabilir.

Aşağıdaki tabloda, her LoadOption değerle birlikte çağrıldığında Load yöntemine yönelik davranış ve ayrıca değerlerin yüklenen satırın satır durumuyla nasıl etkileşime geçtiği gösterilmektedir. Son satır ("(Mevcut değil)" olarak etiketlenmiş), var olan hiçbir satırla eşleşmeyen gelen satırların davranışını açıklar. Bu tablodaki her hücre, bir satırdaki alanın geçerli ve özgün değerini ve DataRowState yöntem tamamlandıktan sonra Load değeri açıklar.

Mevcut DataRowState Upsert Üzerine YazChanges PreserveChanges (Varsayılan davranış)
Eklendi Geçerli = <Gelen>

Özgün = -<Kullanılamıyor>

Durum = <Eklendi>

RowAction = Değiştir
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Current = <Var Olan>

Özgün = <Gelen>

State = <Modified>

RowAction = ChangeOriginal
Değiştirildi Geçerli = <Gelen>

Özgün = <Var Olan>

State = <Modified>

RowAction = Değiştir
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Current = <Var Olan>

Özgün = <Gelen>

State = <Modified>

RowAction =ChangeOriginal
Silindi (Yükleme silinen satırları etkilemez)

Geçerli = ---

Özgün = <Var Olan>

Durum = <Silindi>

(Yeni satır aşağıdaki özelliklerle eklenir)

Geçerli = <Gelen>

Özgün = <Kullanılamıyor>

Durum = <Eklendi>

RowAction = Ekle
Silmeyi geri al ve

Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Geçerli = <Kullanılamıyor>

Özgün = <Gelen>

Durum = <Silindi>

RowAction = ChangeOriginal
Değişme -den Geçerli = <Gelen>

Özgün = <Var Olan>

Yeni değer mevcut değerle aynıysa

State = <Unchanged>

RowAction = Nothing

Başka

State = <Modified>

RowAction = Değiştir
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Mevcut değil) Geçerli = <Gelen>

Özgün = <Kullanılamıyor>

Durum = <Eklendi>

RowAction = Ekle
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal

içindeki DataColumn değerler ve AutoIncrementgibi ReadOnly özelliklerin kullanılmasıyla kısıtlanabilir. yöntemi, Load bu tür sütunları sütunun özellikleri tarafından tanımlanan davranışla tutarlı bir şekilde işler. üzerindeki DataColumn salt okunur kısıtlaması yalnızca bellekte gerçekleşen değişiklikler için geçerlidir. yöntemi Load gerekirse salt okunur sütun değerlerinin üzerine yazar.

Yöntemi çağırırken Load OverwriteChanges veya PreserveChanges seçeneklerini belirtirseniz, gelen verilerin 'nin birincil veri kaynağından DataTablegeldiği varsayımı yapılır ve DataTable değişiklikleri izler ve değişiklikleri veri kaynağına geri yayabilir. Upsert seçeneğini seçerseniz, verilerin orta katman bileşeni tarafından sağlanan ve belki de bir kullanıcı tarafından değiştirilmiş olan veriler gibi ikincil bir veri kaynağından geldiği varsayılır. Bu durumda, amacın içindeki bir veya daha fazla veri kaynağından DataTableverileri toplamak ve ardından belki de verileri birincil veri kaynağına geri yaymak olduğu varsayımı yer alır. LoadOption parametresi, birincil anahtar karşılaştırması için kullanılacak satırın belirli sürümünü belirlemek için kullanılır. Aşağıdaki tabloda ayrıntılar sağlanır.

Yükle seçeneği Birincil anahtar karşılaştırması için kullanılan DataRow sürümü
OverwriteChanges Varsa özgün sürümü, aksi takdirde Geçerli sürüm
PreserveChanges Varsa özgün sürümü, aksi takdirde Geçerli sürüm
Upsert Varsa geçerli sürüm, aksi halde Özgün sürüm

Ayrıca bkz.

Şunlara uygulanır

Load(IDataReader, LoadOption, FillErrorEventHandler)

Kaynak:
DataTable.cs
Kaynak:
DataTable.cs
Kaynak:
DataTable.cs

DataTable Hata işleme temsilcisi kullanılarak sağlanan IDataReader öğesini kullanarak bir veri kaynağındaki değerlerle doldurur.

public:
 virtual void Load(System::Data::IDataReader ^ reader, System::Data::LoadOption loadOption, System::Data::FillErrorEventHandler ^ errorHandler);
public virtual void Load (System.Data.IDataReader reader, System.Data.LoadOption loadOption, System.Data.FillErrorEventHandler? errorHandler);
public virtual void Load (System.Data.IDataReader reader, System.Data.LoadOption loadOption, System.Data.FillErrorEventHandler errorHandler);
abstract member Load : System.Data.IDataReader * System.Data.LoadOption * System.Data.FillErrorEventHandler -> unit
override this.Load : System.Data.IDataReader * System.Data.LoadOption * System.Data.FillErrorEventHandler -> unit
Public Overridable Sub Load (reader As IDataReader, loadOption As LoadOption, errorHandler As FillErrorEventHandler)

Parametreler

reader
IDataReader

Sonuç IDataReader kümesi sağlayan bir.

loadOption
LoadOption

numaralandırmasından LoadOption , içinde zaten bulunan DataTable satırların aynı birincil anahtarı paylaşan gelen satırlarla nasıl birleştirildiğini gösteren bir değer.

errorHandler
FillErrorEventHandler

FillErrorEventHandler Veri yüklenirken bir hata oluştuğunda çağrılacak bir temsilci.

Örnekler

static void Main()
{
    // Attempt to load data from a data reader in which
    // the schema is incompatible with the current schema.
    // If you use exception handling, you won't get the chance
    // to examine each row, and each individual table,
    // as the Load method progresses.
    // By taking advantage of the FillErrorEventHandler delegate,
    // you can interact with the Load process as an error occurs,
    // attempting to fix the problem, or simply continuing or quitting
    // the Load process:
    DataTable table = GetIntegerTable();
    DataTableReader reader = new DataTableReader(GetStringTable());
    table.Load(reader, LoadOption.OverwriteChanges, FillErrorHandler);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
}

private static DataTable GetIntegerTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(int));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { 4 });
    table.Rows.Add(new object[] { 5 });
    table.AcceptChanges();
    return table;
}

private static DataTable GetStringTable()
{
    // Create sample Customers table, in order
    // to demonstrate the behavior of the DataTableReader.
    DataTable table = new DataTable();

    // Create two columns, ID and Name.
    DataColumn idColumn = table.Columns.Add("ID", typeof(string));

    // Set the ID column as the primary key column.
    table.PrimaryKey = new DataColumn[] { idColumn };

    table.Rows.Add(new object[] { "Mary" });
    table.Rows.Add(new object[] { "Andy" });
    table.Rows.Add(new object[] { "Peter" });
    table.AcceptChanges();
    return table;
}

static void FillErrorHandler(object sender, FillErrorEventArgs e)
{
    // You can use the e.Errors value to determine exactly what
    // went wrong.
    if (e.Errors.GetType() == typeof(System.FormatException))
    {
        Console.WriteLine("Error when attempting to update the value: {0}",
            e.Values[0]);
    }

    // Setting e.Continue to True tells the Load
    // method to continue trying. Setting it to False
    // indicates that an error has occurred, and the
    // Load method raises the exception that got
    // you here.
    e.Continue = true;
}
Sub Main()
  Dim table As New DataTable()

  ' Attempt to load data from a data reader in which
  ' the schema is incompatible with the current schema.
  ' If you use exception handling, you won't get the chance
  ' to examine each row, and each individual table,
  ' as the Load method progresses.
  ' By taking advantage of the FillErrorEventHandler delegate,
  ' you can interact with the Load process as an error occurs,
  ' attempting to fix the problem, or simply continuing or quitting
  ' the Load process:
  table = GetIntegerTable()
  Dim reader As New DataTableReader(GetStringTable())
  table.Load(reader, LoadOption.OverwriteChanges, _
      AddressOf FillErrorHandler)

  Console.WriteLine("Press any key to continue.")
  Console.ReadKey()
End Sub

Private Sub FillErrorHandler(ByVal sender As Object, _
  ByVal e As FillErrorEventArgs)
  ' You can use the e.Errors value to determine exactly what
  ' went wrong.
  If e.Errors.GetType Is GetType(System.FormatException) Then
    Console.WriteLine("Error when attempting to update the value: {0}", _
      e.Values(0))
  End If

  ' Setting e.Continue to True tells the Load
  ' method to continue trying. Setting it to False
  ' indicates that an error has occurred, and the 
  ' Load method raises the exception that got 
  ' you here.
  e.Continue = True
End Sub

Private Function GetIntegerTable() As DataTable
  ' Create sample table with a single Int32 column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(Integer))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {4})
  table.Rows.Add(New Object() {5})
  table.TableName = "IntegerTable"
  table.AcceptChanges()
  Return table
End Function

Private Function GetStringTable() As DataTable
  ' Create sample table with a single String column.
  Dim table As New DataTable

  Dim idColumn As DataColumn = table.Columns.Add("ID", _
      GetType(String))

  ' Set the ID column as the primary key column.
  table.PrimaryKey = New DataColumn() {idColumn}

  table.Rows.Add(New Object() {"Mary"})
  table.Rows.Add(New Object() {"Andy"})
  table.Rows.Add(New Object() {"Peter"})
  table.AcceptChanges()
  Return table
End Function

Private Sub PrintColumns( _
   ByVal table As DataTable)

  ' Loop through all the rows in the DataTableReader.
  For Each row As DataRow In table.Rows
    For Each col As DataColumn In table.Columns
      Console.Write(row(col).ToString() & " ")
    Next
    Console.WriteLine()
  Next
End Sub

Açıklamalar

Load yöntemi, yüklenen IDataReaderiçinden ilk sonuç kümesini kullanır ve başarıyla tamamlandıktan sonra okuyucunun konumunu varsa sonraki sonuç kümesine ayarlar. Verileri dönüştürürken yöntemi yöntemiyle Load aynı dönüştürme kurallarını DbDataAdapter.Fill kullanır.

Yöntemin Load bir IDataReader örnekten verileri yüklerken karşılaşılan üç özel sorunu hesaba katması gerekir: şema, veriler ve olay işlemleri. Şemayla çalışırken, Load yöntem aşağıdaki tabloda açıklandığı gibi koşullarla karşılaşabilir. Şema işlemleri, veri içermeyenler bile tüm içeri aktarılan sonuç kümeleri için gerçekleşir.

Koşul Davranış
şemasına DataTable sahip değil. yöntemi, Load içeri aktarılan IDataReaderdosyasından sonuç kümesine göre şemayı çıkarsar.
bir DataTable şemaya sahiptir, ancak yüklenen şemayla uyumsuzdur. yöntemi, Load uyumsuz şemaya veri yüklemeye çalışırken oluşan belirli bir hataya karşılık gelen bir özel durum oluşturur.
Şemalar uyumludur, ancak yüklenen sonuç kümesi şemasında DataTablevar olmayan sütunlar bulunur. yöntemi, Load 'nin şemasına DataTableek sütun ekler. ve yüklenen sonuç kümesinde DataTable karşılık gelen sütunlar değer uyumlu değilse yöntemi bir özel durum oluşturur. yöntemi ayrıca eklenen tüm sütunlar için sonuç kümesinden kısıtlama bilgilerini alır. Birincil Anahtar kısıtlaması durumu dışında, bu kısıtlama bilgileri yalnızca geçerli DataTable yükleme işleminin başında herhangi bir sütun içermiyorsa kullanılır.
Şemalar uyumludur, ancak yüklenen sonuç kümesi şemasında dosyasından DataTabledaha az sütun vardır. Eksik bir sütunun varsayılan değeri tanımlanmışsa veya sütunun veri türü null atanabilirse yöntemi, Load eksik sütunun varsayılan veya null değerini değiştirerek satırların eklenmesine izin verir. Hiçbir varsayılan değer veya null kullanılamıyorsa, Load yöntem bir özel durum oluşturur. Belirli bir varsayılan değer sağlanmazsa, Load yöntem varsayılan değeri örtük olarak null değerini kullanır.

Veri işlemleri açısından yönteminin Load davranışını dikkate almadan önce, içindeki DataTable her satırın her sütun için hem geçerli değeri hem de özgün değeri koruduğunu düşünün. Bu değerler eşdeğer olabilir veya satırdaki veriler doldurulduktan DataTablesonra değiştirilmişse farklı olabilir. Daha fazla bilgi için bkz. Satır Durumları ve Satır Sürümleri .

Bu yöntem çağrısında, belirtilen LoadOption parametre gelen verilerin işlenmesini etkiler. Load yöntemi, var olan satırlar ile aynı birincil anahtara sahip satırları yüklemeyi nasıl işlemelidir? Geçerli değerleri mi, özgün değerleri mi yoksa her ikisini birden mi değiştirmeli? Bu sorunlar ve daha fazlası parametresi tarafından loadOption denetleniyor.

Mevcut satır ve gelen satır karşılık gelen birincil anahtar değerlerini içeriyorsa, satır geçerli satır durumu değeri kullanılarak işlenir, aksi takdirde yeni satır olarak kabul edilir.

Olay işlemleri açısından, RowChanging olay her satır değiştirilmeden önce gerçekleşir ve RowChanged olay her satır değiştirildikten sonra gerçekleşir. Her durumda, Action olay işleyicisine geçirilen örneğin özelliği DataRowChangeEventArgs , olayla ilişkili belirli eylem hakkında bilgi içerir. Bu eylem değeri, yükleme işleminden önceki satırın durumuna bağlı olarak değişir. Her durumda, her iki olay da gerçekleşir ve eylem her biri için aynıdır. Eylem, geçerli satır durumuna bağlı olarak her satırın geçerli veya özgün sürümüne ya da her ikisine de uygulanabilir.

Aşağıdaki tabloda, her LoadOption değerle birlikte çağrıldığında Load yöntemine yönelik davranış ve ayrıca değerlerin yüklenen satırın satır durumuyla nasıl etkileşime geçtiği gösterilmektedir. Son satır ("(Mevcut değil)" olarak etiketlenmiş), var olan hiçbir satırla eşleşmeyen gelen satırların davranışını açıklar. Bu tablodaki her hücre, bir satırdaki alanın geçerli ve özgün değerini ve DataRowState yöntem tamamlandıktan sonra Load değeri açıklar.

Mevcut DataRowState Upsert Üzerine YazChanges PreserveChanges (Varsayılan davranış)
Eklendi Geçerli = <Gelen>

Özgün = -<Kullanılamıyor>

Durum = <Eklendi>

RowAction = Değiştir
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Current = <Var Olan>

Özgün = <Gelen>

State = <Modified>

RowAction = ChangeOriginal
Değiştirildi Geçerli = <Gelen>

Özgün = <Var Olan>

State = <Modified>

RowAction = Değiştir
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Current = <Var Olan>

Özgün = <Gelen>

State = <Modified>

RowAction =ChangeOriginal
eleted (Yükleme silinen satırları etkilemez)

Geçerli = ---

Özgün = <Var Olan>

Durum = <Silindi>

(Yeni satır aşağıdaki özelliklerle eklenir)

Geçerli = <Gelen>

Özgün = <Kullanılamıyor>

Durum = <Eklendi>

RowAction = Ekle
Silmeyi geri al ve

Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Geçerli = <Kullanılamıyor>

Özgün = <Gelen>

Durum = <Silindi>

RowAction = ChangeOriginal
Değişme -den Geçerli = <Gelen>

Özgün = <Var Olan>

Yeni değer mevcut değerle aynıysa

State = <Unchanged>

RowAction = Nothing

Başka

State = <Modified>

RowAction = Değiştir
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Mevcut değil) Geçerli = <Gelen>

Özgün = <Kullanılamıyor>

Durum = <Eklendi>

RowAction = Ekle
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal
Geçerli = <Gelen>

Özgün = <Gelen>

State = <Unchanged>

RowAction = ChangeCurrentAndOriginal

içindeki DataColumn değerler ve AutoIncrementgibi ReadOnly özelliklerin kullanılmasıyla kısıtlanabilir. yöntemi, Load bu tür sütunları sütunun özellikleri tarafından tanımlanan davranışla tutarlı bir şekilde işler. üzerindeki DataColumn salt okunur kısıtlaması yalnızca bellekte gerçekleşen değişiklikler için geçerlidir. yöntemi Load gerekirse salt okunur sütun değerlerinin üzerine yazar.

Yöntemi çağırırken Load OverwriteChanges veya PreserveChanges seçeneklerini belirtirseniz, gelen verilerin 'nin birincil veri kaynağından DataTablegeldiği varsayımı yapılır ve DataTable değişiklikleri izler ve değişiklikleri veri kaynağına geri yayabilir. Upsert seçeneğini seçerseniz, verilerin orta katman bileşeni tarafından sağlanan ve belki de bir kullanıcı tarafından değiştirilmiş olan veriler gibi ikincil bir veri kaynağından geldiği varsayılır. Bu durumda, amacın içindeki bir veya daha fazla veri kaynağından DataTableverileri toplamak ve ardından belki de verileri birincil veri kaynağına geri yaymak olduğu varsayımı yer alır. LoadOption parametresi, birincil anahtar karşılaştırması için kullanılacak satırın belirli sürümünü belirlemek için kullanılır. Aşağıdaki tabloda ayrıntılar sağlanır.

Yükle seçeneği Birincil anahtar karşılaştırması için kullanılan DataRow sürümü
OverwriteChanges Varsa özgün sürümü, aksi takdirde Geçerli sürüm
PreserveChanges Varsa özgün sürümü, aksi takdirde Geçerli sürüm
Upsert Varsa geçerli sürüm, aksi halde Özgün sürüm

errorHandler parametresi, FillErrorEventHandler veri yüklenirken hata oluştuğunda çağrılan bir yordama başvuran bir temsilcidir. FillErrorEventArgs Yordama geçirilen parametre, oluşan hata, geçerli veri satırı ve doldurulan satır hakkındaki bilgileri almanıza DataTable olanak sağlayan özellikler sağlar. Daha basit bir try/catch bloğu yerine bu temsilci mekanizmasını kullanmak, hatayı belirlemenize, durumu işlemenize ve isterseniz işlemeye devam etmenizi sağlar. FillErrorEventArgs parametresi bir Continue özellik sağlar: hatayı işlediğinizi ve işlemeye true devam etmek istediğinizi belirtmek için bu özelliği olarak ayarlayın. İşlemeyi durdurmak istediğinizi belirtmek için özelliğini false olarak ayarlayın. özelliğini false olarak ayarlamanın, sorunu tetikleyen kodun özel durum oluşturmasına neden olduğunu unutmayın.

Ayrıca bkz.

Şunlara uygulanır