C# 数据读取器中没有当前查询

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地址、字节和错误代码) 这是它抛出异常的

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秒。