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();