MySql.Data.MySqlClient.MySqlException (0x80004005)

我正在使用 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): 在 MySql.Data.MySqlClient.MySqlStream.ReadPacket() 的 MySql.Data.MySqlClient.NativeDriver.GetResult 处的表'bogus_table' 的SELECT 命令拒绝用户 'XXX'@'YYY'在 MySql.Data.MySqlClient.MySqlDataReader.NextResult() 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior 行为) 的 MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) (Int32&fluenceRow, Int64&insertId)在 MySql.Data.MySqlClient.MySqlDataReader.ClearKillFlag() 在 MySql.Data.MySqlClient.MySqlDataReader.Close() 在 MySql.Data.MySqlClient.MySqlDataReader.Dispose(Boolean disposing)

在 MySql.Data.MySqlClient.MySqlDataReader.Dispose()在 Dapper.SqlMapper.d__136 1.<>m__Finally1()    at

  Dapper.SqlMapper.<QueryImpl>d__1361.移动下一步()


弑天下
浏览 2029回答 1
1回答

慕斯王

这可能是Mysql Driver实现中的问题 ;这是提到bogus_table 的代码块。如果您的过程有空结果,请尝试使用 Execute 调用(因为它在内部实现了执行非查询) 而不是 Query。using (var conn = DataFactory.InitializeConnection(false))&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; conn.Execute("ProcedureName", new&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; puserid = ID&nbsp; &nbsp; &nbsp; &nbsp; }, commandType: System.Data.CommandType.StoredProcedure);&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP