OleDbDataAdapter.Fill 메서드

정의

ADO DataSet 또는 개체의 Recordset 행과 일치하도록 행을 추가하거나 Record 새로 고칩니다.

오버로드

Name Description
Fill(DataTable, Object)

지정된 DataTable 개체와 ADO 개체를 Recordset 사용하여 ADO Record 또는 개체의 행과 일치하도록 행을 추가하거나 DataTable 새로 고칩니다.

Fill(DataSet, Object, String)

지정된 DataSet, ADO 개체 및 원본 테이블 이름을 사용하여 ADO Recordset 또는 개체의 행과 일치하도록 행 Record 을 추가하거나 DataSet 새로 고칩니다.

Fill(DataTable, Object)

Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs

지정된 DataTable 개체와 ADO 개체를 Recordset 사용하여 ADO Record 또는 개체의 행과 일치하도록 행을 추가하거나 DataTable 새로 고칩니다.

public:
 int Fill(System::Data::DataTable ^ dataTable, System::Object ^ ADODBRecordSet);
public int Fill(System.Data.DataTable dataTable, object ADODBRecordSet);
override this.Fill : System.Data.DataTable * obj -> int
Public Function Fill (dataTable As DataTable, ADODBRecordSet As Object) As Integer

매개 변수

dataTable
DataTable

레코드 DataTable 로 채우고 필요한 경우 스키마를 채우는 A입니다.

ADODBRecordSet
Object

ADO Recordset 또는 Record 개체입니다.

반품

에 성공적으로 새로 고친 행 수 DataTable입니다. 행을 반환하지 않는 문의 영향을 받는 행은 포함되지 않습니다.

설명

ADO(ActiveX Data Objects)와 ADO.NET 간의 연결은 ADO에서 DataSet 데이터를 복사할 수 있는 단방향 작업이지만 데이터에 대한 모든 업데이트는 ADO.NET 의해 처리되어야 합니다.

메서드의 Fill 이 오버로드는 작업 완료 시 입력 RecordsetFill 닫지 않습니다.

여러 결과를 반환하는 일괄 처리 SQL 문을 처리할 때 OLE DB.NET Framework Data Provider 대한 FillFillSchema 구현은 첫 번째 결과에 대한 스키마 정보만 검색합니다.

Fill 작업은 지정된 대상 DataTable 개체에 DataSet행을 추가하여 개체가 아직 없는 경우 해당 개체를 DataTable 만듭니다. 개체 DataTableFill 만들 때 작업은 일반적으로 열 이름 메타데이터만 만듭니다. 그러나 속성이 MissingSchemaAction 설정된 AddWithKey경우 적절한 기본 키와 제약 조건도 생성됩니다.

메서드를 Fill 동일한 DataTable방법으로 여러 번 사용할 수 있습니다. 기본 키가 있는 경우 들어오는 행은 이미 존재하는 일치하는 행과 병합됩니다. 기본 키가 없으면 들어오는 행이 에 추가됩니다 DataTable. 기본 키 정보가 있는 경우 중복 행이 조정되고 해당 행에 해당하는 DataTable행에 DataSet 한 번만 표시됩니다. 기본 키 정보는 속성을 지정하거나 FillSchema 속성을 로 설정 PrimaryKeyDataTable하여 설정할 MissingSchemaActionAddWithKey있습니다.

SelectCommand가 OUTER JOIN 결과를 반환하는 경우, DataAdapter는 생성된 PrimaryKey에 대해 DataTable 값을 설정하지 않습니다. 중복 행이 올바르게 확인되도록 기본 키를 명시적으로 정의해야 합니다. 자세한 내용은 기본 키 정의합니다.

OLE DB용 .NET Framework Data Provider 올바르게 작동하려면 AddWithKey 네이티브 OLE DB 공급자가 DBPROP_UNIQUEROWS 속성을 설정하여 필요한 기본 키 정보를 가져온 다음 IColumnsRowset DBCOLUMN_KEYCOLUMN 검사하여 기본 키 열인 열을 결정해야 합니다. 또는 사용자가 각 DataTable키에 대한 기본 키 제약 조건을 명시적으로 설정할 수 있습니다. 이렇게 하면 기존 레코드와 일치하는 들어오는 레코드가 추가되지 않고 업데이트됩니다.

OleDbDataAdapter 채우는 DataTable동안 중복 열이 발생하면 "columnname 1", "columnname2", "columnname3" 등의 패턴을 사용하여 후속 의 이름을 생성합니다. 빈 열 이름은 DataTable첫 번째 열에 빈 문자열을 사용하고 이후 빈 열에는 "1", "2", "3" 등을 사용하여 추가됩니다.

ADO Recordset 또는 Record 개체의 값은 스토리지에 대한 DataSet공용 언어 런타임 형식으로 변환됩니다.

Caution

채우기 작업이 완료되면 메서드의 Fill 이 오버로드가 ADO 개체에서 암시적으로 호출 Close 되지 않습니다. 따라서 ADO Close 또는 Recordset 개체 사용을 마치면 항상 호출 Record 합니다. 이렇게 하면 데이터 원본에 대한 기본 연결이 적시에 해제되고 기존 참조가 여전히 존재할 때 관리되지 않는 ADO 개체가 가비지 수집에 의해 회수되므로 가능한 액세스 위반을 방지할 수 있습니다.

a에서 TableMappings.Add 메서드를 DataAdapter 호출하고 원본 테이블 매개 변수를 빈 문자열에 명시적으로 매핑하면 원본 테이블을 사용하여 데이터 세트가 성공적으로 채워지지만 데이터 세트는 아무것도 채워지지 않습니다. 예를 들어 다음 예제 rDataSet 에서는 아무것도 채워지지 않습니다.

rAdapter.TableMappings.Add("source table", "");
rAdapter.Fill(rDataSet, "source table");

이 예제에서는 여러 결과를 처리할 때 결과를 건너뛸 수 있는 방법을 보여줍니다.

다음 예제에서는 ADOOleDbDataAdapterDataTable 사용하여 채우기 위해 사용합니다Recordset. 이 예제에서는 ADO Recordset를 만들었다고 가정합니다.

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()
     Dim custDS As DataSet = New DataSet
     Dim custTable As DataTable = New DataTable("Customers")
     custTable.Columns.Add("CustomerID", Type.GetType("System.String"))
     custTable.Columns.Add("CompanyName", Type.GetType("System.String"))
     custDS.Tables.Add(custTable)
     'Use ADO objects from ADO library (msado15.dll) imported
     ' as.NET library ADODB.dll using TlbImp.exe
     Dim adoConn As ADODB.Connection = New ADODB.Connection()
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)
     custDA.Fill(custTable, adoRS)
     adoRS.Close()
     adoConn.Close()
OleDbDataAdapter custDA = new OleDbDataAdapter();
     DataSet custDS = new DataSet();
     DataTable custTable = new DataTable("Customers");
     custTable.Columns.Add("CustomerID", typeof(String));
     custTable.Columns.Add("CompanyName", typeof(String));
     custDS.Tables.Add(custTable);
     //Use ADO objects from ADO library (msado15.dll) imported
     //  as.NET library ADODB.dll using TlbImp.exe
     ADODB.Connection adoConn = new ADODB.Connection();
     ADODB.Recordset adoRS = new ADODB.Recordset();
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);
     custDA.Fill(custTable, adoRS);
     adoRS.Close();
     adoConn.Close();

추가 정보

적용 대상

Fill(DataSet, Object, String)

Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs

지정된 DataSet, ADO 개체 및 원본 테이블 이름을 사용하여 ADO Recordset 또는 개체의 행과 일치하도록 행 Record 을 추가하거나 DataSet 새로 고칩니다.

public:
 int Fill(System::Data::DataSet ^ dataSet, System::Object ^ ADODBRecordSet, System::String ^ srcTable);
public int Fill(System.Data.DataSet dataSet, object ADODBRecordSet, string srcTable);
override this.Fill : System.Data.DataSet * obj * string -> int
Public Function Fill (dataSet As DataSet, ADODBRecordSet As Object, srcTable As String) As Integer

매개 변수

dataSet
DataSet

레코드 DataSet 로 채우고 필요한 경우 스키마를 채우는 A입니다.

ADODBRecordSet
Object

ADO Recordset 또는 Record 개체입니다.

srcTable
String

테이블 매핑에 사용되는 원본 테이블입니다.

반품

에 성공적으로 추가되거나 새로 고쳐진 행 수 DataSet입니다. 행을 반환하지 않는 문의 영향을 받는 행은 포함되지 않습니다.

예외

원본 테이블이 잘못되었습니다.

설명

ADO(ActiveX Data Objects)와 ADO.NET 간의 연결은 ADO에서 DataSet 데이터를 복사할 수 있는 단방향 작업이지만 데이터에 대한 모든 업데이트는 ADO.NET 의해 처리되어야 합니다.

메서드는 Fill 작업 완료 시 입력 NextRecordset 을 닫고, 메서드를 Recordset호출 Recordset 하여 여러 결과를 반복합니다Fill.

Fill 작업은 지정된 대상 DataTable 개체에 DataSet행을 추가하여 개체가 아직 없는 경우 해당 개체를 DataTable 만듭니다. 개체 DataTableFill 만들 때 작업은 일반적으로 열 이름 메타데이터만 만듭니다. 그러나 속성이 MissingSchemaAction 설정된 AddWithKey경우 적절한 기본 키와 제약 조건도 생성됩니다.

기본 키 정보가 있는 경우 중복 행이 조정되고 해당 행에 해당하는 DataTable행에 DataSet 한 번만 표시됩니다. 기본 키 정보는 속성을 지정하거나 FillSchema 속성을 로 설정 PrimaryKeyDataTable하여 설정할 MissingSchemaActionAddWithKey있습니다.

OLE DB용 .NET Framework Data Provider 올바르게 작동하려면 AddWithKey 네이티브 OLE DB 공급자가 DBPROP_UNIQUEROWS 속성을 설정하여 필요한 기본 키 정보를 가져온 다음 IColumnsRowset의 DBCOLUMN_KEYCOLUMN 검사하여 기본 키 열인 열을 결정해야 합니다. 또는 사용자가 각 DataTable키에 대한 기본 키 제약 조건을 명시적으로 설정할 수 있습니다. 이렇게 하면 기존 레코드와 일치하는 들어오는 레코드가 추가되지 않고 업데이트됩니다.

SelectCommand가 OUTER JOIN 결과를 반환하는 경우, DataAdapter는 생성된 PrimaryKey에 대해 DataTable 값을 설정하지 않습니다. 중복 행이 올바르게 확인되도록 기본 키를 명시적으로 정의해야 합니다. 자세한 내용은 기본 키 정의합니다.

Recordset 작업이 시작되기 Fill 전에 닫혀 있으면 오류가 발생하지 않습니다. 행을 반환하지 않는 쿼리는 닫힌 Recordset쿼리로 표시되므로 여러 결과를 처리하는 데 필요합니다. OleDbDataAdapter 닫힌 NextRecordset 자를 호출 Recordset 하고 처리를 계속합니다.

데이터 집합을 채우는 동안 오류가 발생하면 오류가 발생하기 전에 추가된 행은 에 남아 있습니다 DataSet. 나머지 작업은 중단됩니다.

개체가 DbDataAdapter 채우는 DataTable동안 중복 열이 발견되면 "columnname 1", "columnname2", "columnname3" 등의 패턴을 사용하여 후속 의 이름을 생성합니다. 들어오는 데이터에 명명되지 않은 열이 포함된 경우 "Column1", "Column2" 등의 패턴에 따라 배치 DataSet 됩니다. 각 결과 집합에 여러 결과 집합이 DataSet 추가되면 별도의 테이블에 배치됩니다. 지정된 테이블 이름에 정수 값을 추가하여 추가 결과 집합의 이름을 지정합니다(예: "Table", "Table1", "Table2" 등). 열 및 테이블 이름을 사용하는 애플리케이션은 이러한 명명 패턴과 충돌하지 않도록 해야 합니다.

ADO Recordset 또는 Record 개체의 값은 스토리지에 대한 DataSet공용 언어 런타임 형식으로 변환됩니다.

메모

이 메서드 오버 Fill 로드는 채우기 작업이 완료되면 ADO 개체를 암시적으로 호출 Close 합니다.

다음 예제에서는 ADO OleDbDataAdapterDataSet 개체인 Recordset ADO Record 를 사용하여 채우기 위해 사용합니다. 이 예제에서는 ADO RecordSet 및 개체를 만들었다고 가정합니다 Record .

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()
     Dim custDS As DataSet = New DataSet
     'Use ADO objects from ADO library (msado15.dll) imported
     ' as.NET library ADODB.dll using TlbImp.exe
     Dim adoConn As ADODB.Connection = New ADODB.Connection()
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)
     custDA.Fill(custDS, adoRS, "Customers")
     adoConn.Close()
OleDbDataAdapter custDA = new OleDbDataAdapter();
     DataSet custDS = new DataSet();
     //Use ADO objects from ADO library (msado15.dll) imported
     // as.NET library ADODB.dll using TlbImp.exe
     ADODB.Connection adoConn = new ADODB.Connection();
     ADODB.Recordset adoRS = new ADODB.Recordset();
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);
     custDA.Fill(custDS, adoRS, "Customers");
     adoConn.Close();

추가 정보

적용 대상