C# SQL执行标量返回NULL

C# SQL执行标量返回NULL,c#,sql,executescalar,C#,Sql,Executescalar,ExecuteScalar用于返回一个单个值,您选择的是完整记录。因此,通常使用ExecuteReader和Read来获取所有记录 但实际上,您可以将ExecuteScalar与SELECT*一起使用。发生的情况是返回结果集中第一行的第一列,或者如果结果集为空,则返回一个null引用 因为您得到了NULL,所以过滤器似乎没有返回记录 由于需要计数,您可以将查询更改为: queryShelf = "SELECT * FROM shelftable WHERE ShelfId= @ShelfId";

ExecuteScalar
用于返回一个单个值,您选择的是完整记录。因此,通常使用
ExecuteReader
Read
来获取所有记录

但实际上,您可以将
ExecuteScalar
SELECT*
一起使用。发生的情况是返回结果集中第一行的第一列,或者如果结果集为空,则返回一个null引用

因为您得到了
NULL
,所以过滤器似乎没有返回记录

由于需要计数,您可以将查询更改为:

queryShelf = "SELECT * FROM shelftable WHERE ShelfId= @ShelfId";

//Create Mysql Command
MySqlCommand cmd = new MySqlCommand(queryShelf, connection);

cmd.Parameters.Add(new MySqlParameter("@ShelfId", MySqlDbType.VarChar)).Value = MainWindow.shelfIds[i];

//ExecuteScalar will return one value
int Count = int.Parse(cmd.ExecuteScalar() + "");

现在,您永远不会得到
null
,但记录计数为0,如果没有记录与此
ShelfId

一起存在,您的问题是什么?查询返回的第一行的第一列是什么?不要在查询中使用*。您需要返回一个值,而不是值的“数组”
queryShelf = "SELECT COUNT(*) FROM shelftable WHERE ShelfId= @ShelfId";
// ...
int Count = (int) cmd.ExecuteScalar();