0

我已经在 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 执行的单个函数中。

4

2 回答 2

1

尝试使用@而不是?

所以:

string qry = "SELECT * FROM user WHERE ID = @userID";

cmd.Parameters.AddWithValue("@userID", userID);

如 MySQL 页面所述:http: //dev.mysql.com/doc/refman/5.0/en/connector-net-tutorials-intro.html#connector-net-tutorials-parameters

于 2013-05-03T07:50:08.490 回答
1

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

所以你的 sql proc 应该是这样的

Select *
From (TableName)
Where userID = @UserID

所以在你的表单中你会调用@UserID,因为这是你在sql中传递的参数。

于 2013-05-03T08:09:09.607 回答