SqliteDataReader в C#
Метод ExecuteReader возвращает односторонний
курсор: повторно к предыдущей строке вернуться
нельзя. Read сдвигает указатель вперёд и
возвращает false, когда строк больше нет.
Колонку читают по индексу, с нуля. В таблице с
полями "a" и "b" второй столбец,
индекс 1, даст "2":
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.14" />
</ItemGroup>
</Project>
using Microsoft.Data.Sqlite;
using SqliteConnection db = new("Data Source=:memory:");
db.Open();
using (SqliteCommand c = db.CreateCommand())
{
c.CommandText = "CREATE TABLE IF NOT EXISTS t (a TEXT, b TEXT); INSERT INTO t VALUES ('1','2')";
c.ExecuteNonQuery();
}
using SqliteCommand q = db.CreateCommand();
q.CommandText = "SELECT a,b FROM t";
using SqliteDataReader r = q.ExecuteReader();
r.Read();
Console.WriteLine(r.GetString(1));
Если в выборке несколько строк, цикл
while (r.Read()) обходит их по одной.
В примере строка одна, поэтому Read
вызывают один раз. После закрытия ридера через
using читать результат нельзя.
В таблице "notes" есть колонки
"title" и "body". Добавьте
строку "Plan" и "Ship it" и
выведите текст заметки.