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

时间:2018-01-25 02:58:58

标签: c# mysql .net database

  

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"]);

2 个答案:

答案 0 :(得分:4)

using关键字导致创建的对象在using块的末尾被销毁。在这里,您将在阻止后访问数据阅读器。

在销毁之前,您需要访问块内的阅读器。将它分配给另一个变量是不够的,因为这只是创建了对同一对象的另一个引用。

答案 1 :(得分:0)

' dUserInfo'是对“读者”的引用。读者在您尝试在“userId ='线。