C# &引用;字典中不存在给定的密钥;在C中执行mysqldatareader时#
我已经在mysql中运行了这个命令,没有任何错误。我的另一个命令运行良好,但此代码不起作用。有人知道这个代码会发生什么吗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)
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