MySql.Data.MySqlClient.MySqlException (0x80004005): SELECT 命令被拒绝给用户“XXX”@“YYY”表“bogus_table”

0x4*_*9D1 5 c# mysql dapper

我正在使用 Dapper 来调用 MySql 存储过程。该过程执行得很好,但之后代码抛出异常。有问题的代码块是这样的:

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

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的数据库中没有bogus_table,但错误消息中显示了它:

MySql.Data.MySqlClient.MySqlException (0x80004005):在 MySql.Data.MySqlClient.MySqlStream.ReadPacket() 的 MySql.Data.MySqlClient.NativeDriver.GetResult 处,对用户 'XXX'@'YYY' 对于表'bogus_table'的 SELECT 命令被拒绝(Int32&affectedRow,Int64&insertedId)在MySql.Data.MySqlClient.Driver.NextResult(Int32 statementsId,布尔力)在MySql.Data.MySqlClient.MySqlDataReader.NextResult()在MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior行为)在 MySql.Data.MySqlClient.MySqlDataReader.ClearKillFlag() 在 MySql.Data.MySqlClient.MySqlDataReader.Close() 在 MySql.Data.MySqlClient.MySqlDataReader.Dispose(布尔处置)
在 MySql.Data.MySqlClient.MySqlDataReader.Dispose()在 Dapper.SqlMapper.d__136 1.<>m__Finally1() at Dapper.SqlMapper.<QueryImpl>d__1361.MoveNext()

小智 3

可能是 Mysql Driver实现的问题;这是提到bogus_table的代码块。如果您的过程有空结果,请尝试使用 Execute 进行调用(因为它在内部实现了执行非查询) 而不是 Query。

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