Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
public interface IDataAdapter
{
MissingMappingAction MissingMappingAction { get; set; }
MissingSchemaAction MissingSchemaAction { get; set; }
ITableMappingCollection TableMappings { get; }
DataTable[] FillSchema(DataSet dataSet, SchemaType schemaType);
int Fill(DataSet dataSet);
IDataParameter[] GetFillParameters();
int Update(DataSet dataSet);
}
Роль интерфейсов IDataReader и IDataRecord
Следующим основным интерфейсом является
IDataReader
IDataReader
public interface IDataReader : IDisposable, IDataRecord
{
// Плюс члены интерфейса IDataRecord
int Depth { get; }
bool IsClosed { get; }
int RecordsAffected { get; }
void Close();
DataTable GetSchemaTable();
bool NextResult();
bool Read();
Dispose();
}
Наконец, интерфейс
IDataReader
IDataRecord
IDataRecord
System.Object
IDataRecord
public interface IDataRecord
{
int FieldCount { get; }
object this[ int i ] { get; }
object this[ string name ] { get; }
bool GetBoolean(int i);
byte GetByte(int i);
long GetBytes(int i, long fieldOffset, byte[] buffer,
int bufferoffset, int length);
char GetChar(int i);
long GetChars(int i, long fieldoffset, char[] buffer,
int bufferoffset, int length);
IDataReader GetData(int i);
string GetDataTypeName(int i);
DateTime GetDateTime(int i);
Decimal GetDecimal(int i);
double GetDouble(int i);
Type GetFieldType(int i);
float GetFloat(int i);
Guid GetGuid(int i);
short GetInt16(int i);
int GetInt32(int i);
long GetInt64(int i);
string GetName(int i);
int GetOrdinal(string name);
string GetString(int i);
object GetValue(int i);
int GetValues(object[] values);
bool IsDBNull(int i);
}
На заметку! Метод
IDataReader.IsDBNull()
null
null
null
Абстрагирование поставщиков данных с использованием интерфейсов
К настоящему моменту вы должны лучше понимать общую функциональность, присущую всем поставщикам данных .NET Core. Вспомните, что хотя точные имена реализуемых типов будут отличаться между поставщиками данных, в коде такие типы применяются в схожей манере — в том и заключается преимущество полиморфизма на основе интерфейсов. Скажем, если определить метод, который принимает параметр
IDbConnection
public static void OpenConnection(IDbConnection cn)
{
<b> // Открыть входное подключение для вызывающего кода.</b>
connection.Open();
}
На заметку! Использовать интерфейсы вовсе не обязательно; аналогичного уровня абстракции можно достичь путем применения абстрактных базовых классов (таких как
DbConnection
То же самое справедливо для возвращаемых значений. Создайте новый проект консольного приложения .NET Core по имени
MyConnectionFactory
OleDb
Microsoft.Data.SqlClient
System.Data.Common
System.Data.Odbc
System.Data.OleDb
Далее добавьте в проект новый файл по имени
DataProviderEnum.cs