【问题标题】:Getting exception on select statement在选择语句上获得异常
【发布时间】:2015-05-26 14:52:27
【问题描述】:

在以下代码中得到一个异常:{"Fatal error encountered during command execution."}

internal string GetUserRole(string userEmail)
    {
        _query = "SELECT Role FROM RegisteredUsers WHERE Email = @userEmail";
        string role = null;

        using (_msqlCon = new MySqlConnection(_connectionString))
        {
            _msqlCon.Open();

            using (_command = new MySqlCommand(_query, _msqlCon))
            {
                MySqlDataReader reader = _command.ExecuteReader();

                while (reader.Read())
                {
                    if (reader["Email"].Equals(userEmail))
                    {
                        role = reader["Role"].ToString();
                        break;
                    }
                }
            }
        }

        return role;
    }

innerException 说:Parameter @userEmail 必须被定义。当我必须从给定的参数中进行选择时,这是我通常做出选择语句的方式,所以我想这只是一个小错误。但是我已经在这段代码上盲目地加注了将近 20 分钟。我的查询有什么问题:_query = "SELECT Role FROM RegisteredUsers WHERE Email = @userEmail";

【问题讨论】:

  • @userEmail 在哪里定义?为什么不这样做:_query = string.Format("SELECT Role FROM RegisteredUsers WHERE Email = '{0}'", @userEmail);
  • @CoderForHire 你的解决方案很容易受到sql injection 攻击。

标签: c# mysql


【解决方案1】:

正如错误所说...查询使用@userEmail 参数,但您没有为该参数提供值。

ExecuteReader之前添加以下行:

_command.Parameters.AddWithValue("@userEmail", userEmail);

【讨论】:

  • 同意,尽管我认为您只需使用 userEmail 作为参数的值,以便它与传入的值匹配。
  • 或更好的_command.Parameters.Add("@userEmail", SqlDbType.VarChar).Value = "some@email.com"; 因为最好提供正确的类型而不是让数据库猜测。 `
  • @Danny 确实,我没有看到电子邮件在参数列表中,谢谢。
猜你喜欢
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 2012-02-01
  • 2013-05-12
相关资源
最近更新 更多