다음을 통해 공유


OleDbDataAdapter.Fill 메서드

정의

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

오버로드

Fill(DataTable, Object)

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

Fill(DataSet, Object, String)

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

Fill(DataTable, Object)

Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs

지정된 DataTable 및 ADO 개체를 사용하여 ADO Recordset 또는 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입니다.

ADODBRecordSet
Object

ADO Recordset이나 Record 개체입니다.

반환

DataTable에 성공적으로 새로 고쳐진 행의 수를 반환합니다. 여기에는 행을 반환하지 않는 문의 영향을 받는 행은 포함되지 않습니다.

설명

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

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

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

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

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

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

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

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

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

주의

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

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

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

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

다음 예제에서는 를 사용하여 OleDbDataAdapter ADO Recordset를 사용하여 를 DataTable 채웁니다. 이 예제에서는 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

지정된 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입니다.

ADODBRecordSet
Object

ADO Recordset이나 Record 개체입니다.

srcTable
String

테이블 매핑에 사용되는 소스 테이블입니다.

반환

DataSet에 성공적으로 추가했거나 새로 고친 행의 수를 반환합니다. 여기에는 행을 반환하지 않는 문의 영향을 받는 행은 포함되지 않습니다.

예외

소스 테이블이 잘못된 경우

설명

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

메서드는 Fill 에서 메서드Recordset를 호출 NextRecordset 하여 여러 결과를 반복하여 작업이 완료될 때 입력 Recordset 을 닫습니다Fill.

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

기본 키 정보가 있으면 중복 행이 조정되고 에 해당하는 DataSetDataTable 한 번만 표시됩니다. 기본 키 정보는 의 속성을 지정하거나 속성을 DataTable로 설정 MissingSchemaActionAddWithKey하여 PrimaryKey 를 통해 FillSchema설정할 수 있습니다.

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

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

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

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

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

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

참고

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

다음 예제에서는 를 사용하여 OleDbDataAdapter ADO 개체인 ADO RecordsetRecord 를 사용하여 를 채웁니다DataSet. 이 예제에서는 ADO RecordSetRecord 개체를 만들었다고 가정합니다.

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();  

추가 정보

적용 대상