OleDbDataAdapter.Fill Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Lägger till eller uppdaterar rader i DataSet för att matcha dem i en ADO Recordset eller Record ett objekt.
Överlagringar
| Name | Description |
|---|---|
| Fill(DataTable, Object) |
Lägger till eller uppdaterar rader i en DataTable för att matcha dem i en ADO |
| Fill(DataSet, Object, String) |
Lägger till eller uppdaterar rader i DataSet för att matcha dem i en ADO |
Fill(DataTable, Object)
- Källa:
- OleDbDataAdapter.cs
- Källa:
- OleDbDataAdapter.cs
- Källa:
- OleDbDataAdapter.cs
- Källa:
- OleDbDataAdapter.cs
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
Parametrar
- ADODBRecordSet
- Object
En ADO Recordset eller Record ett objekt.
Returer
Antalet rader har uppdaterats till DataTable. Detta inkluderar inte rader som påverkas av instruktioner som inte returnerar rader.
Kommentarer
Länken mellan ActiveX Data Objects (ADO) och ADO.NET är en enkelriktad åtgärd där du kan kopiera data från ADO till DataSet, men eventuella uppdateringar av data måste hanteras av ADO.NET.
Den här överlagringen av Fill metoden stänger inte indata Recordset när åtgärden har slutförts Fill .
När du hanterar batch-SQL-instruktioner som returnerar flera resultat hämtar den här implementeringen av Fill och FillSchema för OLE DB.NET Framework Data Provider endast schemainformation för det första resultatet.
Åtgärden Fill lägger till raderna i det angivna målobjektet DataTable i DataSetoch skapar DataTable objektet om det inte redan finns. När du skapar ett DataTable objekt Fill skapar åtgärden vanligtvis endast metadata för kolumnnamn. Men om egenskapen MissingSchemaAction är inställd på AddWithKeyskapas även lämpliga primära nycklar och begränsningar.
Du kan använda Fill metoden flera gånger på samma DataTable. Om det finns en primärnyckel sammanfogas inkommande rader med matchande rader som redan finns. Om det inte finns någon primärnyckel läggs inkommande rader till i DataTable. Om primärnyckelinformation finns, stämmas alla dubblettrader av och visas bara en gång i DataTable som motsvarar DataSet. Primär nyckelinformation kan anges antingen via FillSchema, genom att PrimaryKey ange egenskapen DataTableför eller genom att ställa in MissingSchemaAction egenskapen på AddWithKey.
Om SelectCommand returnerar resultatet av en OUTER JOIN, anger inte DataAdapter ett PrimaryKey värde för den resulterande DataTable. Du måste uttryckligen definiera den primära nyckeln för att se till att dubblettrader matchas korrekt. Mer information finns i Definiera primära nycklar.
För att fungera korrekt med .NET Framework-Data Provider för OLE DB kräver AddWithKey att den interna OLE DB-providern hämtar nödvändig primärnyckelinformation genom att ange egenskapen DBPROP_UNIQUEROWS och sedan fastställa vilka kolumner som är primära nyckelkolumner genom att undersöka DBCOLUMN_KEYCOLUMN i IColumnsRowset. Alternativt kan användaren uttryckligen ange de primära nyckelbegränsningarna för varje DataTable. Detta säkerställer att inkommande poster som matchar befintliga poster uppdateras i stället för att läggs till.
Om det OleDbDataAdapter uppstår dubbletter av kolumner när du fyller i en DataTablegenereras namn för efterföljande kolumner med hjälp av mönstret "columnname1", "columnname2", "columnname3" och så vidare. Tomma kolumnnamn läggs till i DataTable, med hjälp av en tom sträng för den första kolumnen, följt av "1", "2", "3" och så vidare för efterföljande tomma kolumner.
Värden i ADO Recordset eller Record objekt konverteras till vanliga språkkörningstyper för lagring i DataSet.
Caution
Den här överlagringen Fill av metoden anropar Close inte implicit ADO-objektet när fyllningsåtgärden är klar. Anropa Close därför alltid när du är klar med ADO Recordset eller Record objekt. Detta säkerställer att den underliggande anslutningen till en datakälla släpps i tid och förhindrar även eventuella åtkomstöverträdelser på grund av ohanterade ADO-objekt som frigörs av skräpinsamling när befintliga referenser fortfarande finns.
När du anropar TableMappings.Add metoden på en DataAdapter och du uttryckligen mappar källtabellparametern till en tom sträng fylls datauppsättningen med källtabellen, men datauppsättningen fylls i med ingenting. I följande exempel rDataSet fylls till exempel ingenting i.
rAdapter.TableMappings.Add("source table", "");
rAdapter.Fill(rDataSet, "source table");
Det här exemplet visar hur du kan hoppa över ett resultat när du hanterar flera resultat.
I följande exempel används en OleDbDataAdapter för att fylla en DataTable med hjälp av en ADO Recordset. Det här exemplet förutsätter att du har skapat en 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();
Se även
Gäller för
Fill(DataSet, Object, String)
- Källa:
- OleDbDataAdapter.cs
- Källa:
- OleDbDataAdapter.cs
- Källa:
- OleDbDataAdapter.cs
- Källa:
- OleDbDataAdapter.cs
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
Parametrar
- ADODBRecordSet
- Object
En ADO Recordset eller Record ett objekt.
- srcTable
- String
Källtabellen som används för tabellmappningarna.
Returer
Antalet rader som har lagts till eller uppdaterats i DataSet. Detta inkluderar inte rader som påverkas av instruktioner som inte returnerar rader.
Undantag
Källtabellen är ogiltig.
Kommentarer
Länken mellan ActiveX Data Objects (ADO) och ADO.NET är en enkelriktad åtgärd där du kan kopiera data från ADO till DataSet, men eventuella uppdateringar av data måste hanteras av ADO.NET.
Metoden Fill itererar genom flera resultat genom att anropa NextRecordset metoden på Recordsetoch stänga indata Recordset när åtgärden har slutförts Fill .
Åtgärden Fill lägger till raderna i det angivna målobjektet DataTable i DataSetoch skapar DataTable objektet om det inte redan finns. När du skapar ett DataTable objekt Fill skapar åtgärden vanligtvis endast metadata för kolumnnamn. Men om egenskapen MissingSchemaAction är inställd på AddWithKeyskapas även lämpliga primära nycklar och begränsningar.
Om primärnyckelinformation finns, stämmas alla dubblettrader av och visas bara en gång i DataTable som motsvarar DataSet. Primär nyckelinformation kan anges antingen via FillSchema, genom att PrimaryKey ange egenskapen DataTableför eller genom att ställa in MissingSchemaAction egenskapen på AddWithKey.
För att fungera korrekt med .NET Framework-Data Provider för OLE DB kräver AddWithKey att den interna OLE DB-providern hämtar nödvändig primärnyckelinformation genom att ange egenskapen DBPROP_UNIQUEROWS och sedan avgöra vilka kolumner som är primära nyckelkolumner genom att undersöka DBCOLUMN_KEYCOLUMN i IColumnsRowset. Alternativt kan användaren uttryckligen ange de primära nyckelbegränsningarna för varje DataTable. Detta säkerställer att inkommande poster som matchar befintliga poster uppdateras i stället för att läggs till.
Om SelectCommand returnerar resultatet av en OUTER JOIN, anger inte DataAdapter ett PrimaryKey värde för den resulterande DataTable. Du måste uttryckligen definiera den primära nyckeln för att se till att dubblettrader matchas korrekt. Mer information finns i Definiera primära nycklar.
Recordset Om stängs innan åtgärden startas Fill visas inga fel. Detta krävs för hantering av flera resultat eftersom frågor som inte returnerar rader indikeras av en stängd Recordset. Den OleDbDataAdapter bara anropar NextRecordset den stängda Recordset och fortsätter bearbetningen.
Om ett fel påträffas när datauppsättningen fylls i, finns rader som lagts till innan felet inträffar kvar i DataSet. Resten av åtgärden avbryts.
DbDataAdapter Om objektet stöter på dubblettkolumner när det fyller i en DataTablegenererar det namn för efterföljande kolumner med hjälp av mönstret "columnname1", "columnname2", "columnname3" och så vidare. Om inkommande data innehåller icke namngivna kolumner placeras de i DataSet enligt mönstret "Column1", "Column2" och så vidare. När flera resultatuppsättningar läggs till i varje DataSet resultatuppsättning placeras i en separat tabell. Ytterligare resultatuppsättningar namnges genom att integralvärden läggs till i det angivna tabellnamnet (till exempel "Tabell", "Table1", "Table2" och så vidare.). Program som använder kolumn- och tabellnamn bör se till att konflikter med dessa namngivningsmönster inte inträffar.
Värden i ADO Recordset eller Record objekt konverteras till vanliga språkkörningstyper för lagring i DataSet.
Note
Den här överlagringen Fill av metoden anropar Close implicit ADO-objektet när fyllningsåtgärden är klar.
I följande exempel används en OleDbDataAdapter för att fylla en DataSet med hjälp av en ADO Recordset som är ett ADO-objekt Record . Det här exemplet förutsätter att du har skapat en ADO RecordSet och Record ett objekt.
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();