猿问

如果字段为空,则检查记录是否存在返回始终为假

所以我有以下情况:

如您所见,某些字段为空,因此我想在插入记录之前检查表中是否已经存在goal该记录,我要插入的记录包含与表中已经可用的记录完全相同的结构。


这是我的代码:


public bool CheckGoalExist(Goal goal, Goal.GoalType type, int matchId)

{

    using (MySqlConnection connection = new DBConnection().Connect())

    {

        using (MySqlCommand command = new MySqlCommand())

        {

            command.Connection = connection;

            command.CommandText = "SELECT COUNT(*) FROM goal " +

                "WHERE player_marker_id = @player_marker_id AND " +

                "team_id = @team_id AND " +

                "player_assist_id = @player_assist_id AND " +

                "match_id = @match_id AND " +

                    "minute = @minute AND " +

                    "type = @type";


            command.Parameters.AddWithValue("@team_id", goal.TeamId);

            command.Parameters.AddWithValue("@player_marker_id", goal.MarkerPlayer.Id);

            command.Parameters.AddWithValue("@player_assist_id", goal.AssistPlayer?.Id);

            command.Parameters.AddWithValue("@match_id", matchId);

            command.Parameters.AddWithValue("@minute", goal.Minute);

            command.Parameters.AddWithValue("@type", GetGoalTypeId(type));


            return Convert.ToBoolean(command.ExecuteScalar());

        }

    }

}

这将返回,false但值goal是这样的:


TeamId = 95

MarkerPlayer.Id = 122

AssistPlaer = null

matchId = 2564940

Minute = 82'

Type = 5

为什么返回false?


慕田峪9158850
浏览 141回答 3
3回答

慕的地6264312

如果AssistPlaer是null,则不能使用=. 您需要检查参数是否为null第一个。这是一个带有or语句的常用方法:command.CommandText = "SELECT COUNT(*) FROM goal " +            "WHERE player_marker_id = @player_marker_id AND " +            "team_id = @team_id AND " +            "(@player_assist_id is null or player_assist_id = @player_assist_id) AND " +            "match_id = @match_id AND " +                "minute = @minute AND " +                "type = @type";对于其他潜在null值,您可能也需要这样做。

白衣非少年

由于“AssistPlaer”为“NULL”,SQL 中的查询不能使用等号运算符“=”,而必须使用“IS”或“IS NOT”与“NULL”进行比较。您的查询指出:player_assist_id = @player_assist_id但是“NULL”值不响应相等的运算符,测试它是否为空的唯一方法是:player_assist_id IS NULL所以在您的查询中,您可以使用以下内容绕过它:(@player_assist_id IS NULL AND player_assist_id IS NULL) OR (player_assist_id = @player_assist_id)将此行为应用于可以包含“NULL”的任何列。

元芳怎么了

如果您不知道属性值是否为 NULL,那么您可以使用 IFNULL 字符串函数,以便它将 NULL 值替换为 0 或您在该特定列中定义的其他值。
随时随地看视频慕课网APP
我要回答