MySql.Data.MySqlClient.MySqlException (0x80004005): команда SELECT запрещена пользователю 'XXX' @ 'YYY' для таблицы 'bogus_table' - PullRequest
0 голосов
/ 18 мая 2018

Я использую Dapper для вызова хранимой процедуры MySql.Процедура выполняется просто отлично, но после этого код выдает исключение.Проблемный блок кода выглядит следующим образом:

    using (var conn = DataFactory.InitializeConnection(false))
    {
        conn.Query("ProcedureName", new
        {
            puserid = ID
        }, commandType: System.Data.CommandType.StoredProcedure);
    }

Где DataFactory - следующий статический класс:

public static class DataFactory
{
    public static IDbConnection InitializeConnection(bool open = true, string connectionstring = "", string databaseServerType = "MYSQL")
    {
        if (string.Equals(databaseServerType, "MYSQL"))
        {
            if (string.IsNullOrEmpty(connectionstring))
                connectionstring = Settings.Default.DataConnectionString;
            var csb = new MySql.Data.MySqlClient.MySqlConnectionStringBuilder(connectionstring);
            var conn = new MySql.Data.MySqlClient.MySqlConnection(csb.ConnectionString);
            Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;

            if (open)
                conn.Open();
            return conn;
        }
        throw new NotImplementedException("Not implemented for your database provider");
    }
}

У меня нет bogus_table в моей базе данных, хотяотображается в сообщении об ошибке:

MySql.Data.MySqlClient.MySqlException (0x80004005): команда SELECT запрещена для пользователя 'XXX' @ 'YYY' для таблицы 'bogus_table' в MySql.Data.MySqlClient.MySqlStream.ReadPacket () в MySql.Data.MySqlClient.NativeDriver.GetResult (Int32 & disabledRow, Int64 и вставлен ID) в MySql.Data.MySqlClient.Driult..MySqlClient.MySqlDataReader..MySqlClient.MySqlDataReader.Dispose (логическое удаление)
в MySql.Data.MySqlClient.MySqlDataReader.Dispose () в Dapper.SqlMapper.d__136 1.<>m__Finally1() at Dapper.SqlMapper.<QueryImpl>d__136 1.MoveNext ()

*1016*

1 Ответ

0 голосов
/ 18 мая 2018

это может быть проблема в реализации Mysql Driver ;здесь блок кода, который упоминает bogus_table .если ваша процедура имеет пустой результат, попробуйте вызвать с Execute (потому что она реализует выполнение без запроса внутри) вместо Query.

using (var conn = DataFactory.InitializeConnection(false))
    {
        conn.Execute("ProcedureName", new
        {
            puserid = ID
        }, commandType: System.Data.CommandType.StoredProcedure);
    }
...