DataTable.Load Yöntem

Tanım

DataTableSağlanan değeri kullanarak bir veri kaynağından değerleri doldurur IDataReader .Fills a DataTable with values from a data source using the supplied IDataReader. DataTableZaten satırlar içeriyorsa, veri kaynağından gelen veriler varolan satırlarla birleştirilir.If the DataTable already contains rows, the incoming data from the data source is merged with the existing rows.

Aşırı Yüklemeler

Load(IDataReader)

DataTableSağlanan değeri kullanarak bir veri kaynağından değerleri doldurur IDataReader .Fills a DataTable with values from a data source using the supplied IDataReader. DataTableZaten satırlar içeriyorsa, veri kaynağından gelen veriler varolan satırlarla birleştirilir.If the DataTable already contains rows, the incoming data from the data source is merged with the existing rows.

Load(IDataReader, LoadOption)

DataTableSağlanan değeri kullanarak bir veri kaynağından değerleri doldurur IDataReader .Fills a DataTable with values from a data source using the supplied IDataReader. DataTableZaten satırlar içeriyorsa, veri kaynağındaki gelen veriler, parametrenin değerine göre varolan satırlarla birleştirilir loadOption .If the DataTable already contains rows, the incoming data from the data source is merged with the existing rows according to the value of the loadOption parameter.

Load(IDataReader, LoadOption, FillErrorEventHandler)

Bir DataTable IDataReader hata işleme temsilcisi kullanarak sağlanan değeri kullanarak bir veri kaynağındaki değerleri doldurur.Fills a DataTable with values from a data source using the supplied IDataReader using an error-handling delegate.

Örnekler

Aşağıdaki örnek, yöntemini çağırma ile ilgili birçok sorunu göstermektedir Load .The following example demonstrates several of the issues involved with calling the Load method. İlk olarak, örnek, yüklenmiş bir şemayı göstermek IDataReader ve sonra uyumsuz şemaları işlemek ve eksik veya ek sütunlara sahip şemalar dahil olmak üzere şema sorunlarına odaklanır.First, the example focuses on schema issues, including inferring a schema from the loaded IDataReader, and then handling incompatible schemas, and schemas with missing or additional columns. Örnek daha sonra çeşitli yükleme seçeneklerini işlemek dahil olmak üzere veri sorunlarına odaklanır.The example then focuses on data issues, including handling the various loading options.

Not

Bu örnek, uygulamasının aşırı yüklenmiş sürümlerinden birinin nasıl kullanılacağını gösterir Load .This example shows how to use one of the overloaded versions of Load. Kullanılabilir diğer örnekler için tek tek aşırı yükleme konulara bakın.For other examples that might be available, see the individual overload topics.

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

LoadYöntemi, belirli bir veri kaynağından veri alma ve geçerli veri kapsayıcısına ekleme (Bu durumda bir) gibi birkaç ortak senaryoda kullanılabilir DataTable .The Load method can be used in several common scenarios, all centered around getting data from a specified data source and adding it to the current data container (in this case, a DataTable). Bu senaryolar bir için standart kullanımı tanımlar DataTable ve güncelleştirme ve birleştirme davranışını tanımlar.These scenarios describe standard usage for a DataTable, describing its update and merge behavior.

DataTableTek bir birincil veri kaynağıyla eşitlenir veya güncelleştirir.A DataTable synchronizes or updates with a single primary data source. DataTableDeğişiklikleri izler, birincil veri kaynağıyla eşitlemeye izin verir.The DataTable tracks changes, allowing synchronization with the primary data source. Ayrıca, bir DataTable veya daha fazla ikincil veri kaynağından artımlı verileri kabul edebilir.In addition, a DataTable can accept incremental data from one or more secondary data sources. DataTableİkincil veri kaynağıyla eşitlemeye izin vermek için değişiklikleri izlemekten sorumlu değildir.The DataTable isn't responsible for tracking changes in order to allow synchronization with the secondary data source.

Bu iki kuramsal veri kaynağı söz konusu olduğunda, bir kullanıcının muhtemelen aşağıdaki davranışlardan birini yapması gerekir:Given these two hypothetical data sources, a user is likely to require one of the following behaviors:

  • DataTableBirincil veri kaynağından başlatın.Initialize DataTable from a primary data source. Bu senaryoda, Kullanıcı DataTable birincil veri kaynağından değerlerle boş bir değer başlatmak istiyor.In this scenario, the user wants to initialize an empty DataTable with values from the primary data source. Daha sonra kullanıcı değişiklikleri tekrar birincil veri kaynağına yaymayı amaçlar.Later the user intends to propagate changes back to the primary data source.

  • Değişiklikleri koruyun ve birincil veri kaynağından tekrar eşitleyin.Preserve changes and re-synchronize from the primary data source. Bu senaryoda, Kullanıcı DataTable önceki senaryoya göre doldurulmak ve birincil veri kaynağıyla artımlı bir eşitleme gerçekleştirmek istiyor ve üzerinde yapılan değişiklikleri korur DataTable .In this scenario, the user wants to take the DataTable filled in the previous scenario and perform an incremental synchronization with the primary data source, preserving modifications made in the DataTable.

  • İkincil veri kaynaklarından artımlı veri akışı.Incremental data feed from secondary data sources. 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.In this scenario, the user wants to merge changes from one or more secondary data sources, and propagate those changes back to the primary data source.

LoadYöntemi tüm bu senaryoları mümkün hale getirir.The Load method makes all these scenarios possible. Ancak, bu yöntemin aşırı yüklerinden biri, bir yük seçenek parametresi belirtmenize olanak tanır DataTableAll but one of the overloads for this method allows you to specify a load option parameter, indicating how rows already in a DataTable combine with rows being loaded. (Davranışı belirtmenize izin veren aşırı yükleme, varsayılan yükleme seçeneğini kullanır.) Aşağıdaki tabloda, sabit listesi tarafından sunulan üç yükleme seçeneği açıklanmaktadır LoadOption .(The overload that doesn't allow you to specify the behavior uses the default load option.) The following table describes the three load options provided by the LoadOption enumeration. 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.In each case, the description indicates the behavior when the primary key of a row in the incoming data matches the primary key of an existing row.

Yükleme SeçeneğiLoad Option AçıklamaDescription
PreserveChanges varsayılanınıPreserveChanges (default) Satır özgün sürümünü gelen satırın değeriyle güncelleştirir.Updates the original version of the row with the value of the incoming row.
OverwriteChanges Satırın geçerli ve özgün sürümlerini gelen satırın değeriyle güncelleştirir.Updates the current and original versions of the row with the value of the incoming row.
Upsert Satırın geçerli sürümünü gelen satırın değeriyle güncelleştirir.Updates the current version of the row with the value of the incoming row.

Genel olarak, PreserveChanges ve OverwriteChanges seçenekleri, kullanıcının DataSet ve yaptığı değişiklikleri birincil veri kaynağıyla eşitlenmesi gereken senaryolar için tasarlanmıştır.In general, the PreserveChanges and OverwriteChanges options are intended for scenarios in which the user needs to synchronize the DataSet and its changes with the primary data source. UpsertSeçeneği bir veya daha fazla ikincil veri kaynağından değişiklikleri toplama işlemini kolaylaştırır.The Upsert option facilitates aggregating changes from one or more secondary data sources.

Load(IDataReader)

DataTableSağlanan değeri kullanarak bir veri kaynağından değerleri doldurur IDataReader .Fills a DataTable with values from a data source using the supplied IDataReader. DataTableZaten satırlar içeriyorsa, veri kaynağından gelen veriler varolan satırlarla birleştirilir.If the DataTable already contains rows, the incoming data from the data source is merged with the existing rows.

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

IDataReaderBir sonuç kümesi sağlar.An IDataReader that provides a result set.

Örnekler

Aşağıdaki örnek, yöntemini çağırma ile ilgili birçok sorunu göstermektedir Load .The following example demonstrates several of the issues involved with calling the Load method. İlk olarak, örnek, yüklenmiş bir şemayı göstermek IDataReader ve sonra uyumsuz şemaları işlemek ve eksik veya ek sütunlara sahip şemalar dahil olmak üzere şema sorunlarına odaklanır.First, the example focuses on schema issues, including inferring a schema from the loaded IDataReader, and then handling incompatible schemas, and schemas with missing or additional columns. Örnek daha sonra yöntemi çağırır Load ve yükleme işleminden sonra ve sonra verileri görüntüler.The example then calls the Load method, displaying the data both before and after the load operation.

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

LoadYöntemi, yüklenen ilk sonuç kümesini kullanır IDataReader ve başarıyla tamamlandıktan sonra, varsa okuyucunun konumunu bir sonraki sonuç kümesine ayarlar.The Load method consumes the first result set from the loaded IDataReader, and after successful completion, sets the reader's position to the next result set, if any. Veriler dönüştürülürken, Load yöntemi yöntemiyle aynı dönüştürme kurallarını kullanır DbDataAdapter.Fill .When converting data, the Load method uses the same conversion rules as the DbDataAdapter.Fill method.

Bu Load Yöntem, verileri bir örnekten yüklerken üç özel sorunu dikkate almalıdır IDataReader : şema, veri ve olay işlemleri.The Load method must take into account three specific issues when loading the data from an IDataReader instance: schema, data, and event operations. Şemayla çalışırken, Load yöntemi aşağıdaki tabloda açıklandığı gibi koşullara karşılaşabilir.When working with the schema, the Load method may encounter conditions as described in the following table. Şema işlemleri, hiçbir veri içerenler bile dahil tüm içeri aktarılan sonuç kümeleri için gerçekleşir.The schema operations take place for all imported result sets, even those containing no data.

KoşulCondition DavranışBehavior
DataTableŞeması yok.The DataTable has no schema. LoadYöntemi, içeri aktarılan sonuç kümesini temel alarak şemayı haller IDataReader .The Load method infers the schema based on the result set from the imported IDataReader.
, DataTable Bir şemaya sahiptir, ancak yüklenen şemayla uyumsuzdur.The DataTable has a schema, but it is incompatible with the loaded schema. LoadYöntemi, uyumsuz şemaya veri yüklenmeye çalışıldığında oluşan belirli bir hataya karşılık gelen bir özel durum oluşturur.The Load method throws an exception corresponding to the particular error that occurs when attempting to load data into the incompatible schema.
Şemalar uyumludur, ancak yüklenen sonuç kümesi şeması içinde mevcut olmayan sütunlar içeriyor DataTable .The schemas are compatible, but the loaded result set schema contains columns that do not exist in the DataTable. LoadYöntemi, ek sütunları DataTable şemasına ekler.The Load method adds the extra columns to DataTable's schema. Yöntemi, içindeki karşılık gelen sütunlar değer uyumlu değilse bir özel durum oluşturur DataTable .The method throws an exception if corresponding columns in the DataTable and the loaded result set are not value compatible. Yöntemi, tüm eklenen sütunlar için sonuç kümesinden kısıtlama bilgilerini de alır.The method also retrieves constraint information from the result set for all added columns. Birincil anahtar kısıtlaması olması 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.Except for the case of Primary Key constraint, this constraint information is used only if the current DataTable does not contain any columns at the start of the load operation.
Şemalar uyumlu, ancak yüklenen sonuç kümesi şeması, öğesinden daha az sütun içeriyor DataTable .The schemas are compatible, but the loaded result set schema contains fewer columns than does the DataTable. Eksik bir sütunda varsayılan bir değer tanımlanmış veya sütunun veri türü null değer atanabilir ise, Load Yöntem satırları eklenmesine izin verir ve null eksik sütunun varsayılan veya değeri değiştirilebilir.If a missing column has a default value defined or the column's data type is nullable, the Load method allows the rows to be added, substituting the default or null value for the missing column. Varsayılan değer yoksa veya null kullanılabilir değilse, Load Yöntem bir özel durum oluşturur.If no default value or null can be used, then the Load method throws an exception. Belirli bir varsayılan değer sağlanmazsa, Load Yöntem null değeri kapsanan varsayılan değer olarak kullanır.If no specific default value has been supplied, the Load method uses the null value as the implied default value.

LoadYöntemin veri işlemleri açısından davranışını düşünmeden önce, her bir satırın her bir DataTable sütun için hem geçerli değeri hem de özgün değeri koruduğu göz önünde bulundurun.Before considering the behavior of the Load method in terms of data operations, consider that each row within a DataTable maintains both the current value and the original value for each column. Bu değerler eşdeğer olabilir veya doldurulduğundan sonra satırdaki veriler değiştirilmişse farklı olabilir DataTable .These values may be equivalent, or may be different if the data in the row has been changed since filling the DataTable. Daha fazla bilgi için bkz. Satır durumları ve satır sürümleri.For more information, see Row States and Row Versions.

Yöntemin bu sürümü Load , her satırdaki geçerli değerleri korumaya çalışır ve özgün değeri bozulmadan bırakır.This version of the Load method attempts to preserve the current values in each row, leaving the original value intact. (Gelen verilerin davranışı üzerinde daha ayrıntılı denetim istiyorsanız, bkz DataTable.Load ..) Varolan 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 bir satır olarak kabul edilir.(If you want finer control over the behavior of incoming data, see DataTable.Load.) If the existing row and the incoming row contain corresponding primary key values, the row is processed using its current row state value, otherwise it's treated as a new row.

Olay işlemleri açısından olay, RowChanging her satır değiştirilmeden önce oluşur ve RowChanged olay değiştirildikten sonra olay oluşur.In terms of event operations, the RowChanging event occurs before each row is changed, and the RowChanged event occurs after each row has been changed. Her durumda, Action DataRowChangeEventArgs olay işleyicisine geçirilen örneğin özelliği, olayla ilişkili belirli bir eylem hakkında bilgi içerir.In each case, the Action property of the DataRowChangeEventArgs instance passed to the event handler contains information about the particular action associated with the event. Bu eylem değeri, yükleme işleminden önceki satırın durumuna bağlıdır.This action value depends on the state of the row before the load operation. Her iki durumda da olay oluşur ve eylem her biri için aynıdır.In each case, both events occur, and the action is the same for each. Eylem, her satırın geçerli veya orijinal sürümüne ya da her ikisi de geçerli satır durumuna göre uygulanabilir.The action may be applied to either the current or original version of each row, or both, depending on the current row state.

Aşağıdaki tablo yöntemi için davranışı gösterir Load .The following table displays behavior for the Load method. Son satır ("(yok)" etiketli, varolan bir satırla eşleşmeyen gelen satırlara yönelik davranışı açıklar.The final row (labeled "(Not present)") describes the behavior for incoming rows that don't match any existing row. Bu tablodaki her bir hücre, bir satırdaki alana ilişkin geçerli ve orijinal değeri, DataRowState yöntemin tamamlandıktan sonraki değer için ile birlikte tanımlar Load .Each cell in this table describes the current and original value for a field within a row, along with the DataRowState for the value after the Load method has completed. Bu durumda yöntem, Load seçeneğini göster, ve varsayılan, kullanır PreserveChanges .In this case, the method doesn't allow you to indicate the load option, and uses the default, PreserveChanges.

Varolan DataRowStateExisting DataRowState Yöntemden sonra değerler Load ve olay eylemiValues after Load method, and event action
EklendiAdded Geçerli = <Existing>Current = <Existing>

Özgün = <Incoming>Original = <Incoming>

Durum = <Modified>State = <Modified>

RowAction = ChangeOriginalRowAction = ChangeOriginal
DeğiştirildiModified Geçerli = <Existing>Current = <Existing>

Özgün = <Incoming>Original = <Incoming>

Durum = <Modified>State = <Modified>

RowAction = ChangeOriginalRowAction = ChangeOriginal
SilindiDeleted Geçerli = <Not available>Current = <Not available>

Özgün = <Incoming>Original = <Incoming>

Durum = <Deleted>State = <Deleted>

RowAction = ChangeOriginalRowAction = ChangeOriginal
DeğiştirilmediğiUnchanged Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
(Yok)(Not present) Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal

İçindeki değerler DataColumn ve gibi özellikler kullanılarak kısıtlanabilir ReadOnly AutoIncrement .Values in a DataColumn can be constrained through use of properties such as ReadOnly and AutoIncrement. LoadYöntemi, sütun özellikleri tarafından tanımlanan davranışla tutarlı şekilde bu tür sütunları işler.The Load method handles such columns in a manner that is consistent with the behavior defined by the column's properties. Bir üzerinde salt okuma kısıtlaması DataColumn yalnızca bellekte oluşan değişiklikler için geçerlidir.The read only constraint on a DataColumn is applicable only for changes that occur in memory. LoadYöntemi, gerekirse salt yazılır sütun değerlerinin üzerine yazar.The Load method's overwrites the read-only column values, if needed.

Geçerli satırı gelen bir satırla karşılaştırmak için kullanılacak birincil anahtar alanı sürümünü öğrenmek için, Load yöntemi varsa, bir satırdaki birincil anahtar değerinin orijinal sürümünü kullanır.To determine which version of the primary key field to use for comparing the current row with an incoming row, the Load method uses the original version of the primary key value within a row, if it exists. Aksi takdirde, Load yöntemi birincil anahtar alanının geçerli sürümünü kullanır.Otherwise, the Load method uses the current version of the primary key field.

Ayrıca bkz.

Şunlara uygulanır

Load(IDataReader, LoadOption)

DataTableSağlanan değeri kullanarak bir veri kaynağından değerleri doldurur IDataReader .Fills a DataTable with values from a data source using the supplied IDataReader. DataTableZaten satırlar içeriyorsa, veri kaynağındaki gelen veriler, parametrenin değerine göre varolan satırlarla birleştirilir loadOption .If the DataTable already contains rows, the incoming data from the data source is merged with the existing rows according to the value of the loadOption parameter.

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 bir.An IDataReader that provides one or more result sets.

loadOption
LoadOption

LoadOptionNumaralandırmadaki, içinde olan satırların DataTable aynı birincil anahtarı paylaşan gelen satırlarla nasıl birleştirildiğini belirten bir değer.A value from the LoadOption enumeration that indicates how rows already in the DataTable are combined with incoming rows that share the same primary key.

Örnekler

Aşağıdaki örnek, yöntemini çağırma ile ilgili birçok sorunu göstermektedir Load .The following example demonstrates several of the issues involved with calling the Load method. İlk olarak, örnek, yüklenmiş bir şemayı göstermek IDataReader ve sonra uyumsuz şemaları işlemek ve eksik veya ek sütunlara sahip şemalar dahil olmak üzere şema sorunlarına odaklanır.First, the example focuses on schema issues, including inferring a schema from the loaded IDataReader, and then handling incompatible schemas, and schemas with missing or additional columns. Örnek daha sonra çeşitli yükleme seçeneklerini işlemek dahil olmak üzere veri sorunlarına odaklanır.The example then focuses on data issues, including handling the various loading options.

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

LoadYöntemi, yüklenen ilk sonuç kümesini kullanır IDataReader ve başarıyla tamamlandıktan sonra, varsa okuyucunun konumunu bir sonraki sonuç kümesine ayarlar.The Load method consumes the first result set from the loaded IDataReader, and after successful completion, sets the reader's position to the next result set, if any. Veriler dönüştürülürken, Load yöntemi yöntemiyle aynı dönüştürme kurallarını kullanır Fill .When converting data, the Load method uses the same conversion rules as the Fill method.

Bu Load Yöntem, verileri bir örnekten yüklerken üç özel sorunu dikkate almalıdır IDataReader : şema, veri ve olay işlemleri.The Load method must take into account three specific issues when loading the data from an IDataReader instance: schema, data, and event operations. Şemayla çalışırken, Load yöntemi aşağıdaki tabloda açıklandığı gibi koşullara karşılaşabilir.When working with the schema, the Load method may encounter conditions as described in the following table. Şema işlemleri, hiçbir veri içerenler bile dahil tüm içeri aktarılan sonuç kümeleri için gerçekleşir.The schema operations take place for all imported result sets, even those containing no data.

KoşulCondition DavranışBehavior
DataTableŞeması yok.The DataTable has no schema. LoadYöntemi, içeri aktarılan sonuç kümesini temel alarak şemayı haller IDataReader .The Load method infers the schema based on the result set from the imported IDataReader.
, DataTable Bir şemaya sahiptir, ancak yüklenen şemayla uyumsuzdur.The DataTable has a schema, but it is incompatible with the loaded schema. LoadYöntemi, uyumsuz şemaya veri yüklenmeye çalışıldığında oluşan belirli bir hataya karşılık gelen bir özel durum oluşturur.The Load method throws an exception corresponding to the particular error that occurs when attempting to load data into the incompatible schema.
Şemalar uyumludur, ancak yüklenen sonuç kümesi şeması içinde mevcut olmayan sütunlar içeriyor DataTable .The schemas are compatible, but the loaded result set schema contains columns that don't exist in the DataTable. LoadYöntemi, ek sütunları DataTable şemasına ekler.The Load method adds the extra columns to DataTable's schema. Yöntemi, içindeki karşılık gelen sütunlar değer uyumlu değilse bir özel durum oluşturur DataTable .The method throws an exception if corresponding columns in the DataTable and the loaded result set are not value compatible. Yöntemi, tüm eklenen sütunlar için sonuç kümesinden kısıtlama bilgilerini de alır.The method also retrieves constraint information from the result set for all added columns. Birincil anahtar kısıtlaması olması 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.Except for the case of Primary Key constraint, this constraint information is used only if the current DataTable does not contain any columns at the start of the load operation.
Şemalar uyumlu, ancak yüklenen sonuç kümesi şeması, öğesinden daha az sütun içeriyor DataTable .The schemas are compatible, but the loaded result set schema contains fewer columns than does the DataTable. Eksik bir sütun tanımlanmış bir varsayılan değere sahipse veya sütunun veri türü null yapılabilir ise, Load Yöntem, eksik sütunun varsayılan veya null değeri yerine satır eklenmesine izin verir.If a missing column has a default value defined or the column's data type is nullable, the Load method allows the rows to be added, substituting the default or null value for the missing column. Varsayılan değer veya null kullanılacaksa, Load Yöntem bir özel durum oluşturur.If no default value or null can be used, then the Load method throws an exception. Belirli bir varsayılan değer sağlanmadığında, Load yöntemi belirtilen varsayılan değer olarak null değeri kullanır.If no specific default value has been supplied, the Load method uses the null value as the implied default value.

LoadYöntemin veri işlemleri açısından davranışını düşünmeden önce, her bir satırın her bir DataTable sütun için hem geçerli değeri hem de özgün değeri koruduğu göz önünde bulundurun.Before considering the behavior of the Load method in terms of data operations, consider that each row within a DataTable maintains both the current value and the original value for each column. Bu değerler eşdeğer olabilir veya doldurulduğundan sonra satırdaki veriler değiştirilmişse farklı olabilir DataTable .These values may be equivalent, or may be different if the data in the row has been changed since filling the DataTable. Daha fazla bilgi için bkz. Satır durumları ve satır sürümleri .See Row States and Row Versions for more information.

Bu yöntem çağrısında, belirtilen LoadOption parametre gelen verilerin işlenmesini etkiler.In this method call, the specified LoadOption parameter influences the processing of the incoming data. Yük yöntemi, varolan satırlarla aynı birincil anahtara sahip olan satırları yüklemeyi nasıl işleymelidir?How should the Load method handle loading rows that have the same primary key as existing rows? Geçerli değerler, özgün değerler veya her ikisi de değiştirilsin mi?Should it modify current values, original values, or both? Bu sorunlar ve daha fazlası parametresi tarafından denetlenir loadOption .These issues, and more, are controlled by the loadOption parameter.

Varolan 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 bir satır olarak kabul edilir.If the existing row and the incoming row contain corresponding primary key values, the row is processed using its current row state value, otherwise it's treated as a new row.

Olay işlemleri açısından olay, RowChanging her satır değiştirilmeden önce oluşur ve RowChanged olay değiştirildikten sonra olay oluşur.In terms of event operations, the RowChanging event occurs before each row is changed, and the RowChanged event occurs after each row has been changed. Her durumda, Action DataRowChangeEventArgs olay işleyicisine geçirilen örneğin özelliği, olayla ilişkili belirli bir eylem hakkında bilgi içerir.In each case, the Action property of the DataRowChangeEventArgs instance passed to the event handler contains information about the particular action associated with the event. Bu eylem değeri, yükleme işleminden önceki satır durumuna bağlı olarak değişir.This action value varies, depending on the state of the row before the load operation. Her iki durumda da olay oluşur ve eylem her biri için aynıdır.In each case, both events occur, and the action is the same for each. Eylem, her satırın geçerli veya orijinal sürümüne ya da her ikisi de geçerli satır durumuna göre uygulanabilir.The action may be applied to either the current or original version of each row, or both, depending on the current row state.

Aşağıdaki tabloda, her bir değer ile çağrıldığında Load yönteminin davranışı görüntülenir LoadOption ve ayrıca değerlerin yüklenen satırın satır durumuyla nasıl etkileşime gireceğini gösterir.The following table displays behavior for the Load method when called with each of the LoadOption values, and also shows how the values interact with the row state for the row being loaded. Son satır ("(yok)" etiketli, varolan bir satırla eşleşmeyen gelen satırlara yönelik davranışı açıklar.The final row (labeled "(Not present)") describes the behavior for incoming rows that don't match any existing row. Bu tablodaki her bir hücre, bir satırdaki alana ilişkin geçerli ve orijinal değeri, DataRowState yöntemin tamamlandıktan sonraki değer için ile birlikte tanımlar Load .Each cell in this table describes the current and original value for a field within a row, along with the DataRowState for the value after the Load method has completed.

Varolan DataRowStateExisting DataRowState UpsertUpsert OverwriteChangesOverwriteChanges PreserveChanges (varsayılan davranış)PreserveChanges (Default behavior)
EklendiAdded Geçerli = <Incoming>Current = <Incoming>

Özgün =-<Not available>Original = -<Not available>

Durum = <Added>State = <Added>

RowAction = DeğiştirRowAction = Change
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Existing>Current = <Existing>

Özgün = <Incoming>Original = <Incoming>

Durum = <Modified>State = <Modified>

RowAction = ChangeOriginalRowAction = ChangeOriginal
DeğiştirildiModified Geçerli = <Incoming>Current = <Incoming>

Özgün = <Existing>Original = <Existing>

Durum = <Modified>State = <Modified>

RowAction = DeğiştirRowAction = Change
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Existing>Current = <Existing>

Özgün = <Incoming>Original = <Incoming>

Durum = <Modified>State = <Modified>

RowAction = değişiklik orijinalRowAction =ChangeOriginal
SilindiDeleted (Yükleme, silinen satırları etkilemez)(Load does not affect deleted rows)

Geçerli =---Current = ---

Özgün = <Existing>Original = <Existing>

Durum = <Deleted>State = <Deleted>

(Yeni satır aşağıdaki özelliklerle eklenir)(New row is added with the following characteristics)

Geçerli = <Incoming>Current = <Incoming>

Özgün = <Not available>Original = <Not available>

Durum = <Added>State = <Added>

RowAction = EkleRowAction = Add
Silmeyi geri al veUndo delete and

Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Not available>Current = <Not available>

Özgün = <Incoming>Original = <Incoming>

Durum = <Deleted>State = <Deleted>

RowAction = ChangeOriginalRowAction = ChangeOriginal
DeğiştirilmediğiUnchanged Geçerli = <Incoming>Current = <Incoming>

Özgün = <Existing>Original = <Existing>

Yeni değer var olan değer ile aynıysaIf new value is the same as the existing value then

Durum = <Unchanged>State = <Unchanged>

RowAction = NothingRowAction = Nothing

DeğilseElse

Durum = <Modified>State = <Modified>

RowAction = DeğiştirRowAction = Change
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Yok)Not present) Geçerli = <Incoming>Current = <Incoming>

Özgün = <Not available>Original = <Not available>

Durum = <Added>State = <Added>

RowAction = EkleRowAction = Add
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal

İçindeki değerler DataColumn ve gibi özellikler kullanılarak kısıtlanabilir ReadOnly AutoIncrement .Values in a DataColumn can be constrained through use of properties such as ReadOnly and AutoIncrement. LoadYöntemi, sütun özellikleri tarafından tanımlanan davranışla tutarlı şekilde bu tür sütunları işler.The Load method handles such columns in a manner that is consistent with the behavior defined by the column's properties. Bir üzerinde salt okuma kısıtlaması DataColumn yalnızca bellekte oluşan değişiklikler için geçerlidir.The read only constraint on a DataColumn is applicable only for changes that occur in memory. LoadYöntemi, gerekirse salt yazılır sütun değerlerinin üzerine yazar.The Load method's overwrites the read-only column values, if needed.

Yöntemi çağırırken OverwriteChanges veya PreserveChanges seçeneklerini belirtirseniz Load , bu, gelen verilerin birincil veri kaynağından geldiği varsayımına yapılır DataTable ve DataTable değişiklikleri izler ve değişiklikleri veri kaynağına geri yayabilir.If you specify the OverwriteChanges or PreserveChanges options when calling the Load method, then the assumption is made that the incoming data is coming from the DataTable's primary data source, and the DataTable tracks changes and can propagate the changes back to the data source. Upsert seçeneğini belirlerseniz, verilerin bir orta katman bileşeni tarafından verilen veriler gibi ikincil veri kaynağından (Belki de bir kullanıcı tarafından değiştirilmiş) geldiği varsayılır.If you select the Upsert option, it is assumed that the data is coming from one of a secondary data source, such as data provided by a middle-tier component, perhaps altered by a user. Bu durumda, amaç içindeki bir veya daha fazla veri kaynağından veri toplamaktır DataTable ve belki de verileri birincil veri kaynağına geri yaymaktır.In this case, the assumption is that the intent is to aggregate data from one or more data sources in the DataTable, and then perhaps propagate the data back to the primary data source. LoadOptionParametresi, birincil anahtar karşılaştırması için kullanılacak satırın belirli bir sürümünü belirlemek için kullanılır.The LoadOption parameter is used for determining the specific version of the row that is to be used for primary key comparison. Aşağıdaki tabloda ayrıntılar verilmektedir.The table below provides the details.

Yükleme seçeneğiLoad option Birincil anahtar karşılaştırması için kullanılan DataRow sürümüDataRow version used for primary key comparison
OverwriteChanges Varsa özgün sürümü, aksi takdirde Geçerli sürümOriginal version, if it exists, otherwise Current version
PreserveChanges Varsa özgün sürümü, aksi takdirde Geçerli sürümOriginal version, if it exists, otherwise Current version
Upsert Varsa, geçerli sürüm, aksi takdirde orijinal sürümCurrent version, if it exists, otherwise Original version

Ayrıca bkz.

Şunlara uygulanır

Load(IDataReader, LoadOption, FillErrorEventHandler)

Bir DataTable IDataReader hata işleme temsilcisi kullanarak sağlanan değeri kullanarak bir veri kaynağındaki değerleri doldurur.Fills a DataTable with values from a data source using the supplied IDataReader using an error-handling delegate.

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

Bir IDataReader sonuç kümesi sağlayan bir.A IDataReader that provides a result set.

loadOption
LoadOption

LoadOptionNumaralandırmadaki, içinde olan satırların DataTable aynı birincil anahtarı paylaşan gelen satırlarla nasıl birleştirildiğini belirten bir değer.A value from the LoadOption enumeration that indicates how rows already in the DataTable are combined with incoming rows that share the same primary key.

errorHandler
FillErrorEventHandler

FillErrorEventHandlerVeri yüklenirken bir hata oluştuğunda çağrılacak temsilci.A FillErrorEventHandler delegate to call when an error occurs while loading data.

Ö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

LoadYöntemi, yüklenen ilk sonuç kümesini kullanır IDataReader ve başarıyla tamamlandıktan sonra, varsa okuyucunun konumunu bir sonraki sonuç kümesine ayarlar.The Load method consumes the first result set from the loaded IDataReader, and after successful completion, sets the reader's position to the next result set, if any. Veriler dönüştürülürken, Load yöntemi yöntemiyle aynı dönüştürme kurallarını kullanır DbDataAdapter.Fill .When converting data, the Load method uses the same conversion rules as the DbDataAdapter.Fill method.

Bu Load Yöntem, verileri bir örnekten yüklerken üç özel sorunu dikkate almalıdır IDataReader : şema, veri ve olay işlemleri.The Load method must take into account three specific issues when loading the data from an IDataReader instance: schema, data, and event operations. Şemayla çalışırken, Load yöntemi aşağıdaki tabloda açıklandığı gibi koşullara karşılaşabilir.When working with the schema, the Load method may encounter conditions as described in the following table. Şema işlemleri, hiçbir veri içerenler bile dahil tüm içeri aktarılan sonuç kümeleri için gerçekleşir.The schema operations take place for all imported result sets, even those containing no data.

KoşulCondition DavranışBehavior
DataTableŞeması yok.The DataTable has no schema. LoadYöntemi, içeri aktarılan sonuç kümesini temel alarak şemayı haller IDataReader .The Load method infers the schema based on the result set from the imported IDataReader.
, DataTable Bir şemaya sahiptir, ancak yüklenen şemayla uyumsuzdur.The DataTable has a schema, but it is incompatible with the loaded schema. LoadYöntemi, uyumsuz şemaya veri yüklenmeye çalışıldığında oluşan belirli bir hataya karşılık gelen bir özel durum oluşturur.The Load method throws an exception corresponding to the particular error that occurs when attempting to load data into the incompatible schema.
Şemalar uyumludur, ancak yüklenen sonuç kümesi şeması içinde mevcut olmayan sütunlar içeriyor DataTable .The schemas are compatible, but the loaded result set schema contains columns that don't exist in the DataTable. LoadYöntemi, ek sütunları DataTable şemasına ekler.The Load method adds the extra column(s) to DataTable's schema. Yöntemi, içindeki karşılık gelen sütunlar değer uyumlu değilse bir özel durum oluşturur DataTable .The method throws an exception if corresponding columns in the DataTable and the loaded result set are not value compatible. Yöntemi, tüm eklenen sütunlar için sonuç kümesinden kısıtlama bilgilerini de alır.The method also retrieves constraint information from the result set for all added columns. Birincil anahtar kısıtlaması olması 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.Except for the case of Primary Key constraint, this constraint information is used only if the current DataTable does not contain any columns at the start of the load operation.
Şemalar uyumlu, ancak yüklenen sonuç kümesi şeması, öğesinden daha az sütun içeriyor DataTable .The schemas are compatible, but the loaded result set schema contains fewer columns than does the DataTable. Eksik bir sütun tanımlanmış bir varsayılan değere sahipse veya sütunun veri türü null yapılabilir ise, Load Yöntem, eksik sütunun varsayılan veya null değeri yerine satır eklenmesine izin verir.If a missing column has a default value defined or the column's data type is nullable, the Load method allows the rows to be added, substituting the default or null value for the missing column. Varsayılan değer veya null kullanılacaksa, Load Yöntem bir özel durum oluşturur.If no default value or null can be used, then the Load method throws an exception. Belirli bir varsayılan değer sağlanmadığında, Load yöntemi belirtilen varsayılan değer olarak null değeri kullanır.If no specific default value has been supplied, the Load method uses the null value as the implied default value.

LoadYöntemin veri işlemleri açısından davranışını düşünmeden önce, her bir satırın her bir DataTable sütun için hem geçerli değeri hem de özgün değeri koruduğu göz önünde bulundurun.Before considering the behavior of the Load method in terms of data operations, consider that each row within a DataTable maintains both the current value and the original value for each column. Bu değerler eşdeğer olabilir veya doldurulduğundan sonra satırdaki veriler değiştirilmişse farklı olabilir DataTable .These values may be equivalent, or may be different if the data in the row has been changed since filling the DataTable. Daha fazla bilgi için bkz. Satır durumları ve satır sürümleri .See Row States and Row Versions for more information.

Bu yöntem çağrısında, belirtilen LoadOption parametre gelen verilerin işlenmesini etkiler.In this method call, the specified LoadOption parameter influences the processing of the incoming data. Yük yöntemi, varolan satırlarla aynı birincil anahtara sahip olan satırları yüklemeyi nasıl işleymelidir?How should the Load method handle loading rows that have the same primary key as existing rows? Geçerli değerler, özgün değerler veya her ikisi de değiştirilsin mi?Should it modify current values, original values, or both? Bu sorunlar ve daha fazlası parametresi tarafından denetlenir loadOption .These issues, and more, are controlled by the loadOption parameter.

Varolan 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 bir satır olarak kabul edilir.If the existing row and the incoming row contain corresponding primary key values, the row is processed using its current row state value, otherwise it's treated as a new row.

Olay işlemleri açısından olay, RowChanging her satır değiştirilmeden önce oluşur ve RowChanged olay değiştirildikten sonra olay oluşur.In terms of event operations, the RowChanging event occurs before each row is changed, and the RowChanged event occurs after each row has been changed. Her durumda, Action DataRowChangeEventArgs olay işleyicisine geçirilen örneğin özelliği, olayla ilişkili belirli bir eylem hakkında bilgi içerir.In each case, the Action property of the DataRowChangeEventArgs instance passed to the event handler contains information about the particular action associated with the event. Bu eylem değeri, yükleme işleminden önceki satır durumuna bağlı olarak değişir.This action value varies, depending on the state of the row before the load operation. Her iki durumda da olay oluşur ve eylem her biri için aynıdır.In each case, both events occur, and the action is the same for each. Eylem, her satırın geçerli veya orijinal sürümüne ya da her ikisi de geçerli satır durumuna göre uygulanabilir.The action may be applied to either the current or original version of each row, or both, depending on the current row state.

Aşağıdaki tabloda, her bir değer ile çağrıldığında Load yönteminin davranışı görüntülenir LoadOption ve ayrıca değerlerin yüklenen satırın satır durumuyla nasıl etkileşime gireceğini gösterir.The following table displays behavior for the Load method when called with each of the LoadOption values, and also shows how the values interact with the row state for the row being loaded. Son satır ("(yok)" etiketli, varolan bir satırla eşleşmeyen gelen satırlara yönelik davranışı açıklar.The final row (labeled "(Not present)") describes the behavior for incoming rows that don't match any existing row. Bu tablodaki her bir hücre, bir satırdaki alana ilişkin geçerli ve orijinal değeri, DataRowState yöntemin tamamlandıktan sonraki değer için ile birlikte tanımlar Load .Each cell in this table describes the current and original value for a field within a row, along with the DataRowState for the value after the Load method has completed.

Varolan DataRowStateExisting DataRowState UpsertUpsert OverwriteChangesOverwriteChanges PreserveChanges (varsayılan davranış)PreserveChanges (Default behavior)
EklendiAdded Geçerli = <Incoming>Current = <Incoming>

Özgün =-<Not available>Original = -<Not available>

Durum = <Added>State = <Added>

RowAction = DeğiştirRowAction = Change
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Existing>Current = <Existing>

Özgün = <Incoming>Original = <Incoming>

Durum = <Modified>State = <Modified>

RowAction = ChangeOriginalRowAction = ChangeOriginal
DeğiştirildiModified Geçerli = <Incoming>Current = <Incoming>

Özgün = <Existing>Original = <Existing>

Durum = <Modified>State = <Modified>

RowAction = DeğiştirRowAction = Change
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Existing>Current = <Existing>

Özgün = <Incoming>Original = <Incoming>

Durum = <Modified>State = <Modified>

RowAction = değişiklik orijinalRowAction =ChangeOriginal
eletilmişeleted (Yükleme, silinen satırları etkilemez)(Load does not affect deleted rows)

Geçerli =---Current = ---

Özgün = <Existing>Original = <Existing>

Durum = <Deleted>State = <Deleted>

(Yeni satır aşağıdaki özelliklerle eklenir)(New row is added with the following characteristics)

Geçerli = <Incoming>Current = <Incoming>

Özgün = <Not available>Original = <Not available>

Durum = <Added>State = <Added>

RowAction = EkleRowAction = Add
Silmeyi geri al veUndo delete and

Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Not available>Current = <Not available>

Özgün = <Incoming>Original = <Incoming>

Durum = <Deleted>State = <Deleted>

RowAction = ChangeOriginalRowAction = ChangeOriginal
DeğiştirilmediğiUnchanged Geçerli = <Incoming>Current = <Incoming>

Özgün = <Existing>Original = <Existing>

Yeni değer var olan değer ile aynıysaIf new value is the same as the existing value then

Durum = <Unchanged>State = <Unchanged>

RowAction = NothingRowAction = Nothing

DeğilseElse

Durum = <Modified>State = <Modified>

RowAction = DeğiştirRowAction = Change
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Yok)Not present) Geçerli = <Incoming>Current = <Incoming>

Özgün = <Not available>Original = <Not available>

Durum = <Added>State = <Added>

RowAction = EkleRowAction = Add
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal
Geçerli = <Incoming>Current = <Incoming>

Özgün = <Incoming>Original = <Incoming>

Durum = <Unchanged>State = <Unchanged>

RowAction = ChangeCurrentAndOriginalRowAction = ChangeCurrentAndOriginal

İçindeki değerler DataColumn ve gibi özellikler kullanılarak kısıtlanabilir ReadOnly AutoIncrement .Values in a DataColumn can be constrained through use of properties such as ReadOnly and AutoIncrement. LoadYöntemi, sütun özellikleri tarafından tanımlanan davranışla tutarlı şekilde bu tür sütunları işler.The Load method handles such columns in a manner that is consistent with the behavior defined by the column's properties. Bir üzerinde salt okuma kısıtlaması DataColumn yalnızca bellekte oluşan değişiklikler için geçerlidir.The read only constraint on a DataColumn is applicable only for changes that occur in memory. LoadYöntemi, gerekirse salt yazılır sütun değerlerinin üzerine yazar.The Load method's overwrites the read-only column values, if needed.

Yöntemi çağırırken OverwriteChanges veya PreserveChanges seçeneklerini belirtirseniz Load , bu, gelen verilerin birincil veri kaynağından geldiği varsayımına yapılır DataTable ve DataTable değişiklikleri izler ve değişiklikleri veri kaynağına geri yayabilir.If you specify the OverwriteChanges or PreserveChanges options when calling the Load method, then the assumption is made that the incoming data is coming from the DataTable's primary data source, and the DataTable tracks changes and can propagate the changes back to the data source. Upsert seçeneğini belirlerseniz, verilerin bir orta katman bileşeni tarafından verilen veriler gibi ikincil veri kaynağından (Belki de bir kullanıcı tarafından değiştirilmiş) geldiği varsayılır.If you select the Upsert option, it is assumed that the data is coming from one of a secondary data source, such as data provided by a middle-tier component, perhaps altered by a user. Bu durumda, amaç içindeki bir veya daha fazla veri kaynağından veri toplamaktır DataTable ve belki de verileri birincil veri kaynağına geri yaymaktır.In this case, the assumption is that the intent is to aggregate data from one or more data sources in the DataTable, and then perhaps propagate the data back to the primary data source. LoadOptionParametresi, birincil anahtar karşılaştırması için kullanılacak satırın belirli bir sürümünü belirlemek için kullanılır.The LoadOption parameter is used for determining the specific version of the row that is to be used for primary key comparison. Aşağıdaki tabloda ayrıntılar verilmektedir.The table below provides the details.

Yükleme seçeneğiLoad option Birincil anahtar karşılaştırması için kullanılan DataRow sürümüDataRow version used for primary key comparison
OverwriteChanges Varsa özgün sürümü, aksi takdirde Geçerli sürümOriginal version, if it exists, otherwise Current version
PreserveChanges Varsa özgün sürümü, aksi takdirde Geçerli sürümOriginal version, if it exists, otherwise Current version
Upsert Varsa, geçerli sürüm, aksi takdirde orijinal sürümCurrent version, if it exists, otherwise Original version

errorHandlerParametresi, FillErrorEventHandler verileri yüklerken bir hata oluştuğunda çağrılan bir yordama başvuran bir temsilcisidir.The errorHandler parameter is a FillErrorEventHandler delegate that refers to a procedure that is called when an error occurs while loading data. FillErrorEventArgsYordama geçirilen parametre, oluşan hata, geçerli veri satırı ve Doldurulmakta olan hata hakkında bilgi almanıza olanak sağlayan özellikler sağlar DataTable .The FillErrorEventArgs parameter passed to the procedure provides properties that allow you to retrieve information about the error that occurred, the current row of data, and the DataTable being filled. Daha basit bir try/catch bloğu yerine bu temsilci mekanizmasını kullanmak, hatayı belirlemenizi, durumu işlemenize ve isterseniz işleme devam etmenize olanak sağlar.Using this delegate mechanism, rather than a simpler try/catch block, allows you to determine the error, handle the situation, and continue processing if you like. FillErrorEventArgsParametresi bir özellik sağlar Continue : Bu özelliği true , hatayı işlediğinin ve işleme devam etmek istediğinizi belirtmek için olarak ayarlayın.The FillErrorEventArgs parameter supplies a Continue property: set this property to true to indicate that you have handled the error and wish to continue processing. falseİşlemini durdurmak istediğinizi belirtmek için özelliğini olarak ayarlayın.Set the property to false to indicate that you wish to halt processing. Özelliği, false sorunu tetikleyen kodun bir özel durum oluşturmasını neden olarak ayarlamanın farkında olun.Be aware that setting the property to false causes the code that triggered the problem to throw an exception.

Ayrıca bkz.

Şunlara uygulanır