» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

На нашем литературном портале можно бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю, Троелсен Эндрю . Жанр: Базы данных. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале litmir.org.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Название: Язык программирования C#9 и платформа .NET5
Дата добавления: 22 август 2024
Количество просмотров: 234
Читать онлайн

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту readbookfedya@gmail.com для удаления материала

Язык программирования C#9 и платформа .NET5 читать книгу онлайн

Язык программирования C#9 и платформа .NET5 - читать бесплатно онлайн , автор Троелсен Эндрю

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.

Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.

Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

Перейти на страницу:

<b>private readonly PropertyInfo[] _propertyInfos;</b>

<b>private readonly Dictionary&lt;int, string&gt; _nameDictionary;</b>

public MyDataReader(List&lt;T&gt; records)

{

  Records = records;

<b>  _propertyInfos = typeof(T).GetProperties();</b>

<b>  _nameDictionary = new Dictionary&lt;int,string&gt;();</b>

}

Модифицируйте конструктор, чтобы он принимал строку подключения SQLConnection, а также строки для имен схемы и таблицы, куда будут вставлены записи, и добавьте для этих значений переменные уровня класса:

<b>private readonly SqlConnection _connection;</b>

<b>private readonly string _schema;</b>

<b>private readonly string _tableName;</b>

public MyDataReader(List&lt;T&gt; records, <b>SqlConnection connection</b>,

                    <b>string schema, string </b><b>tableName</b>)

{

  Records = records;

  _propertyInfos = typeof(T).GetProperties();

  _nameDictionary = new Dictionary&lt;int, string&gt;();

<b>  _connection = connection;</b>

<b>  _schema = schema;</b>

<b>  _tableName = tableName;</b>

}

Далее реализуйте метод GetSchemaTable(), который извлекает информацию SQL Server, касающуюся целевой таблицы:

public DataTable GetSchemaTable()

{

  using var schemaCommand =

    new SqlCommand($&quot;SELECT * FROM {_schema}.{_tableName}&quot;, _connection);

  using var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly);

  return reader.GetSchemaTable();

}

Модифицируйте конструктор, чтобы использовать SchemaTable для создания словаря, который содержит поля целевой таблицы в порядке их следования внутри базы данных:

public MyDataReader(List&lt;T&gt; records, <b>SqlConnection connection</b>,

                    <b>string schema, string tableName</b>)

{

  ...

<b>  DataTable schemaTable = GetSchemaTable();</b>

<b>  for (int x = 0; x&lt;schemaTable?.Rows.Count;x++)</b>

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

<b>  {</b>

<b>    DataRow col = schemaTable.Rows[x];</b>

<b>    var columnName = col.Field&lt;string&gt;(&quot;ColumnName&quot;);</b>

<b>    _nameDictionary.Add(x,columnName);</b>

  }

}

Теперь показанные далее методы могут быть реализованы обобщенным образом, используя полученную посредством рефлексии информацию:

public int FieldCount =&gt; _propertyInfos.Length;

public object GetValue(int i)

  =&gt; _propertyInfos

      .First(x=&gt;x.Name.Equals(_nameDictionary[i],

                              StringComparison.OrdinalIgnoreCase))

      .GetValue(Records[_currentIndex]);

Для справки ниже приведены остальные методы, которые должны присутствовать (но не реализованы):

public string GetName(int i) =&gt; throw new NotImplementedException();

public int GetOrdinal(string name) =&gt; throw new NotImplementedException();

public string GetDataTypeName(int i) =&gt; throw new NotImplementedException();

public Type GetFieldType(int i) =&gt; throw new NotImplementedException();

public int GetValues(object[] values) =&gt; throw new NotImplementedException();

public bool GetBoolean(int i) =&gt; throw new NotImplementedException();

public byte GetByte(int i) =&gt; throw new NotImplementedException();

public long GetBytes(int i, long fieldOffset, byte[] buffer,

  int bufferoffset, int length)

  =&gt; throw new NotImplementedException();

public char GetChar(int i) =&gt; throw new NotImplementedException();

public long GetChars(int i, long fieldoffset, char[] buffer,

   int bufferoffset, int length)

   =&gt; throw new NotImplementedException();

public Guid GetGuid(int i) =&gt; throw new NotImplementedException();

public short GetInt16(int i) =&gt; throw new NotImplementedException();

public int GetInt32(int i) =&gt; throw new NotImplementedException();

public long GetInt64(int i) =&gt; throw new NotImplementedException();

public float GetFloat(int i) =&gt; throw new NotImplementedException();

public double GetDouble(int i)  =&gt; throw new NotImplementedException();

Перейти на страницу:
Комментариев (0)