OleDbDataAdapter.Fill 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
ADO Recordset 또는 Record 개체의 행과 일치하는 DataSet의 행을 추가하거나 새로 고칩니다.
오버로드
| Fill(DataTable, Object) |
지정된 DataTable 및 ADO 개체를 사용하여 ADO |
| Fill(DataSet, Object, String) |
지정된 DataSet, ADO 개체 및 소스 테이블 이름을 사용하여 ADO |
Fill(DataTable, Object)
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
매개 변수
- ADODBRecordSet
- Object
ADO Recordset이나 Record 개체입니다.
반환
DataTable에 성공적으로 새로 고쳐진 행의 수를 반환합니다. 여기에는 행을 반환하지 않는 문의 영향을 받는 행은 포함되지 않습니다.
설명
ADO(ActiveX 데이터 개체)와 ADO.NET 간의 연결은 ADO에서 ADO로 데이터를 복사할 DataSet수 있지만 데이터에 대한 업데이트는 ADO.NET 처리해야 한다는 단방향 작업입니다.
메서드의 Fill 이 오버로드는 작업이 완료될 때 입력 Recordset 을 Fill 닫지 않습니다.
여러 결과를 반환하는 일괄 처리 SQL 문을 처리할 때 OLE DB.NET Framework Data Provider 구현 Fill FillSchema 은 첫 번째 결과에 대한 스키마 정보만 검색합니다.
이 Fill 작업은 지정된 대상 DataTable 개체에 DataSet행을 추가하여 개체가 아직 없는 경우 개체를 DataTable 만듭니다. 개체 Fill 를 DataTable 만들 때 작업은 일반적으로 열 이름 메타데이터만 만듭니다. 그러나 경우 합니다 MissingSchemaAction 속성이 AddWithKey, 적절 한 기본 키와 제약 조건도 만들어집니다.
사용할 수는 Fill 메서드를 여러 번에 동일한 DataTable입니다. 기본 키가 있는 경우 들어오는 행이 이미 존재 하는 일치 하는 행과 병합 됩니다. 들어오는 행에 추가 된 기본 키가 없으면는 DataTable합니다. 기본 키 정보가 있으면 중복된 행이 조정되고 해당 행에 해당하는 DataSet행에 DataTable 한 번만 표시됩니다. 기본 키 정보는 속성을 지정하거나 PrimaryKey 속성을 .로 설정 MissingSchemaAction AddWithKey하여 설정할 FillSchema수 DataTable있습니다.
SelectCommand 가 OUTER JOIN의 결과를 반환하면 DataAdapter 는 결과 PrimaryKey 에 대해 DataTable값을 설정하지 않습니다. 중복 행이 올바르게 확인되도록 기본 키를 명시적으로 정의해야 합니다. 자세한 내용은 기본 키 정의합니다.
OLE DB AddWithKey 에 대한 .NET Framework Data Provider 올바르게 작동하려면 네이티브 OLE DB 공급자가 DBPROP_UNIQUEROWS 속성을 설정하여 필요한 기본 키 정보를 가져온 다음 DBCOLUMN_KEYCOLUMN 검사IColumnsRowset하여 기본 키 열인 열을 결정해야 합니다. 또는 사용자가 각각 DataTable에 대해 기본 키 제약 조건을 명시적으로 설정할 수 있습니다. 이렇게 하면 기존 레코드와 일치하는 들어오는 레코드가 추가되지 않고 업데이트됩니다.
OleDbDataAdapter 채우는 DataTable동안 중복 열이 발견되면 "columnname1", "columnname2"*, "*columnname3" 패턴을 사용하여 후속 열의 이름을 생성합니다. 빈 열 이름은 DataTable첫 번째 열에 빈 문자열을 사용하고 이후 빈 열에는 "1", "2", "3" 등을 사용하여 추가됩니다.
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");
이 예제에서는 여러 결과를 처리할 때 결과를 건너뛸 수 있는 방법을 보여줍니다.
다음 예제에서는 ADORecordset를 DataTable 사용하여 OleDbDataAdapter 채우기 위해 사용합니다. 이 예제에서는 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)
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
매개 변수
- ADODBRecordSet
- Object
ADO Recordset이나 Record 개체입니다.
- srcTable
- String
테이블 매핑에 사용되는 소스 테이블입니다.
반환
DataSet에 성공적으로 추가했거나 새로 고친 행의 수를 반환합니다. 여기에는 행을 반환하지 않는 문의 영향을 받는 행은 포함되지 않습니다.
예외
소스 테이블이 잘못된 경우
설명
ADO(ActiveX 데이터 개체)와 ADO.NET 간의 연결은 ADO에서 ADO로 데이터를 복사할 DataSet수 있지만 데이터에 대한 업데이트는 ADO.NET 처리해야 한다는 단방향 작업입니다.
메서드는 Fill 작업 완료 Fill 시 입력 Recordset 을 닫는 메서드를 Recordset호출 NextRecordset 하여 여러 결과를 반복합니다.
이 Fill 작업은 지정된 대상 DataTable 개체에 DataSet행을 추가하여 개체가 아직 없는 경우 개체를 DataTable 만듭니다. 개체 Fill 를 DataTable 만들 때 작업은 일반적으로 열 이름 메타데이터만 만듭니다. 그러나 경우 합니다 MissingSchemaAction 속성이 AddWithKey, 적절 한 기본 키와 제약 조건도 만들어집니다.
기본 키 정보가 있으면 중복된 행이 조정되고 해당 행에 해당하는 DataSet행에 DataTable 한 번만 표시됩니다. 기본 키 정보는 속성을 지정하거나 PrimaryKey 속성을 .로 설정 MissingSchemaAction AddWithKey하여 설정할 FillSchema수 DataTable있습니다.
OLE DB AddWithKey 에 대한 .NET Framework Data Provider 올바르게 작동하려면 네이티브 OLE DB 공급자가 DBPROP_UNIQUEROWS 속성을 설정하여 필요한 기본 키 정보를 가져온 다음 IColumnsRowset 에서 DBCOLUMN_KEYCOLUMN 검사하여 기본 키 열인 열을 결정해야 합니다. 또는 사용자가 각각 DataTable에 대해 기본 키 제약 조건을 명시적으로 설정할 수 있습니다. 이렇게 하면 기존 레코드와 일치하는 들어오는 레코드가 추가되지 않고 업데이트됩니다.
SelectCommand 가 OUTER JOIN의 결과를 반환하면 DataAdapter 는 결과 PrimaryKey 에 대해 DataTable값을 설정하지 않습니다. 중복 행이 올바르게 확인되도록 기본 키를 명시적으로 정의해야 합니다. 자세한 내용은 기본 키 정의합니다.
Recordset 작업이 시작되기 Fill 전에 닫혀 있으면 오류가 발생하지 않습니다. 행을 반환하지 않는 쿼리는 닫힌 Recordset쿼리로 표시되므로 여러 결과를 처리하는 데 필요합니다. OleDbDataAdapter 닫힌 Recordset 자를 호출 NextRecordset 하고 처리를 계속합니다.
데이터 집합을 채우는 동안 오류가 발생하면 오류가 발생하기 전에 추가된 행은 에 남아 있습니다 DataSet. 나머지 작업은 중단됩니다.
개체가 DbDataAdapter 채우는 DataTable동안 중복 열이 발견되면 "columnname1", "columnname2"*, "*columnname3" 패턴을 사용하여 후속 열의 이름을 생성합니다. 들어오는 데이터에 명명되지 않은 열이 포함된 경우 "Column1", "Column2" 패턴 등에 따라 배치 DataSet 됩니다. 각 결과 집합에 여러 결과 집합이 DataSet 추가되면 별도의 테이블에 배치됩니다. 지정된 테이블 이름에 정수 값을 추가하여 추가 결과 집합의 이름을 지정합니다(예: "Table", "Table1", "Table2" 등). 열 및 테이블 이름을 사용 하는 애플리케이션은 이러한 명명 패턴을 사용 하 여 충돌이 발생 하지 않도록 확인 해야 합니다.
ADO Recordset 또는 Record 개체의 값은 DataSet에서 스토리지에 대한 공통 언어 런타임 형식으로 변환됩니다.
참고
이 메서드 오버 Fill 로드는 채우기 작업이 완료되면 ADO 개체를 암시적으로 호출 Close 합니다.
다음 예제에서는 ADO 개체인 DataSet ADO Recordset 를 사용하여 채우기 위해 사용합니다OleDbDataAdapter.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();