System.Exception:数据阅读器中没有当前查询 MySql.Data.MySqlClient.MySqlDataReader.Throw(Exception ex)at at MySql.Data.MySqlClient.MySqlDataReader.GetOrdinal(String name)at at MySql.Data.MySqlClient.MySqlDataReader.get_Item(String name)at at UserData.GetUserData(字符串 sessionTicket,String ipAddress,Byte&的errorCode)
以下是它抛出异常的行。
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"]);
答案 0 :(得分:4)
using
关键字导致创建的对象在using
块的末尾被销毁。在这里,您将在阻止后访问数据阅读器。
在销毁之前,您需要访问块内的阅读器。将它分配给另一个变量是不够的,因为这只是创建了对同一对象的另一个引用。
答案 1 :(得分:0)
' dUserInfo'是对“读者”的引用。读者在您尝试在“userId ='线。