C# &引用;字典中不存在给定的密钥;在C中执行mysqldatareader时#

C# &引用;字典中不存在给定的密钥;在C中执行mysqldatareader时#,c#,mysql,C#,Mysql,我已经在mysql中运行了这个命令,没有任何错误。我的另一个命令运行良好,但此代码不起作用。有人知道这个代码会发生什么吗 private static User GetUser(MySqlCommand cmd) { User usr = new User(); MySqlDataReader rdr = cmd.ExecuteReader(); if (rdr.HasRows)

我已经在mysql中运行了这个命令,没有任何错误。我的另一个命令运行良好,但此代码不起作用。有人知道这个代码会发生什么吗

 private static User GetUser(MySqlCommand cmd)
        {
            User usr = new User();

            MySqlDataReader rdr = cmd.ExecuteReader();
            if (rdr.HasRows)
            {
                while (rdr.Read())
                {
                    usr.Id = Convert.ToInt32(rdr["Id"]);
                    usr.Level = (Level)Enum.Parse(typeof(Level), rdr["level"].ToString());
                    usr.Email = rdr["email"].ToString();
                    usr.CreatedDate = Convert.ToDateTime(rdr["createdDate"].ToString());
                    usr.LastLoginDate = Convert.ToDateTime(rdr["lastLoginDate"].ToString());
                }
            }

           return usr;
        }

 public static User GetUserFromID(int userID)
        {
            string qry = "SELECT * FROM user WHERE ID = ?userID";

            User user = new User();
            MySqlConnection cnn = new MySqlConnection(Globals.CONNSTRING);
            cnn.Open();

            using (cnn)
            {
                MySqlCommand cmd = new MySqlCommand(qry, cnn);
                cmd.Parameters.AddWithValue("userID", userID);

                user = GetUser(cmd);

            }
            cnn.Close();
            return user;
        }
我粘贴在这里的代码给了我一个错误

“字典中不存在给定的密钥。”

在第158行中:

MySqlDataReader rdr = cmd.ExecuteReader();
有人知道这个代码出了什么问题吗?我添加了
CharSet=utf8在连接字符串中,正如人们在SO中建议的那样

我使用的数据库是mariaDB,连接器是mysql最新的连接器。有人知道这有什么问题吗


我在运行其他函数时没有问题。问题发生在我使用mysqldatareader执行的单个函数中。

尝试使用
@
而不是

因此:


正如MySQL页面上所解释的:

您会使用@而不是?当您从sql调用参数时,该参数应在sql中调用为: @userID(无论它是什么类型,VARCHAR,INT等)

因此,您的sql过程应该如下所示

Select *
From (TableName)
Where userID = @UserID

因此,在您的表单中,您可以调用@UserID,因为这是您在sql中传递的参数。

@DGibbs谢谢,但我感到困惑。我的另一个查询用C#写得很好。我已经设置了utf-8,正如人们在回答中所说的那样。现在我要检查参数设置是否正确。我觉得我错过了什么。你能检查一下吗:)什么是
Globals.connString
?cnn的值是多少?你确定你的连接字符串是对的吗?@SonerGönül是的,这是我编写的其他函数的工作,它们从mysqlhelper调用。这个由mysqlexecutereader编写的函数很麻烦。嗯,我只有写一个函数,我在这里发布了。@user2126670:请发布你的connectionstring,以及包括stacktrace在内的全部异常。+1如需帮助,请告诉我答案背后的原因,我正在使用Mysql,我确定?应该有用。请让我参考《谁执行给定代码?》一文。我的答案来自:@Martin,你知道为什么StackOverflow不需要一个字符串来反对反对反对票吗?这样,如果给出的理由是错误的,他们就可以被取消?@Poldie:是的,这不是必需的,但有时对回答问题的人(犯了错误的人)很有帮助以及阅读答案的人(并准备复制错误)。@user2126670:我的答案由MySQL本身的页面支持:我尝试了两种方法,但在MySQL上的executereader中没有一种有效。仍然有相同的问题。您是否调用了我提供给您的代码上方的@userID?在你的工作中寻找类型错误,也许你在某个地方用大写字母调用一个参数,而这个参数应该是小写的。我试过了,但没有成功。如果出现任何错误,我将使用cmd.parameter.addwithvalue com进行处理,但有一个例外。
cmd.Parameters.AddWithValue("@userID", userID);
Select *
From (TableName)
Where userID = @UserID