Вы должны звонить ExecuteScalar
, а не ExecuteNonQuery
. ExecuteNonQuery
предназначен для выполнения незапрашиваемого запроса, то есть оператора SQL, который не создает результирующий набор. ExecuteScalar
предназначен для выполнения запроса и извлечения скаляра, то есть одного значения, которое берется из первого столбца первой строки набора результатов, независимо от того, содержит ли этот набор результатов больше данных.
Для записи вы получаете ноль каждый раз, потому что ExecuteNonQuery
возвращает количество строк, затронутых оператором SQL, где затронутые средства изменились. Оператор SELECT
не влияет на строки, поэтому ноль - правильный результат.
Возможно, вам будет полезно проверить мои примеры ADO.NET , чтобы увидеть, какие объекты и члены использовать, где и когда.