C# 数据读取器中没有当前查询
System.Exception:在数据读取器中没有当前查询 MySql.Data.MySqlClient.MySqlDataReader.Throw(异常ex)位于 MySql.Data.MySqlClient.MySqlDataReader.GetOrdinal(字符串名)位于 MySql.Data.MySqlClient.MySqlDataReader.get_项(字符串名)位于 GetUserData(字符串 sessionTicket、字符串IP地址、字节和错误代码) 这是它抛出异常的行C# 数据读取器中没有当前查询,c#,mysql,.net,database,C#,Mysql,.net,Database,System.Exception:在数据读取器中没有当前查询 MySql.Data.MySqlClient.MySqlDataReader.Throw(异常ex)位于 MySql.Data.MySqlClient.MySqlDataReader.GetOrdinal(字符串名)位于 MySql.Data.MySqlClient.MySqlDataReader.get_项(字符串名)位于 GetUserData(字符串 sessionTicket、字符串IP地址、字节和错误代码) 这是它抛出异常的
userId = Convert.ToInt32(dUserInfo["id"]);
这是完整的代码
dbConnection.SetQuery("SELECT users.id,users.username,users.rank,users.motto,users.look,users.gender,users.last_online,users.credits,users.activity_points,users.home_room,users.block_newfriends,users.hide_online,users.hide_inroom,users.vip,users.account_created,users.vip_points,users.machine_id,users.volume,users.chat_preference,users.focus_preference,users.pets_muted,users.bots_muted,users.advertising_report_blocked,users.last_change,users.gotw_points,users.ignore_invites,users.time_muted,users.allow_gifts,users.friend_bar_state,users.disable_forced_effects,users.allow_mimic,users.rank_vip " +
"FROM users " +
"JOIN user_auth_tickets " +
"ON users.id = user_auth_tickets.user_id " +
"WHERE user_auth_tickets.auth_ticket = @sso AND ip_last = @lastIp " +
"LIMIT 1"
);
dbConnection.AppendParameter("sso", sessionTicket);
dbConnection.AppendParameter("lastIp", ipAddress);
using (var reader = dbConnection.ExecuteReader())
{
if (!reader.HasRows)
{
errorCode = 1;
return null;
}
dUserInfo = reader;
}
userId = Convert.ToInt32(dUserInfo["id"]);
using
关键字会导致在using
块末尾销毁创建的对象。在这里,您正在块之后访问数据读取器
您需要访问块中的读卡器,然后才能将其销毁。仅将其分配给另一个变量是不够的,因为这只会创建对同一对象的另一个引用。'dUserInfo'是对'reader'的引用。在您尝试在“userId=”行中使用读卡器之前,它已被释放。Heh,比我快7秒。