ExecuteScalar в C#
Метод ExecuteScalar возвращает объект
первого столбца первой строки или null,
если строк нет. Удобно для COUNT,
MAX и подзапросов с одним значением.
Две строки в таблице дают COUNT(*) равный
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 (x INT); INSERT INTO t VALUES (1),(2)";
c.ExecuteNonQuery();
}
using SqliteCommand q = db.CreateCommand();
q.CommandText = "SELECT COUNT(*) FROM t";
Console.WriteLine(q.ExecuteScalar());
На пустой таблице "visits" запрос
COUNT(*) всё равно вернёт 0.
Запрос столбца, когда строк нет, дал бы
null, но ниже считают число строк:
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 visits (x INT)";
c.ExecuteNonQuery();
}
using SqliteCommand q = db.CreateCommand();
q.CommandText = "SELECT COUNT(*) FROM visits";
Console.WriteLine(q.ExecuteScalar());
Создайте пустую таблицу "tickets" и
выведите, сколько в ней строк.