【问题标题】:How can I query the MySQL Max_Allowed_Packet through c#?如何通过 c# 查询 MySQL Max_Allowed_Packet?
【发布时间】:2019-01-03 02:15:08
【问题描述】:

我正在尝试检查max_allowed_packet 大小的值。这是我的代码:

public int MaxAllowedPacket()
{                
    var max = 0;
    using (var conn = new MySqlConnection(_ConnectionString))
    {
        var sql = conn.CreateCommand();
        sql.CommandText = "SHOW VARIABLES like 'max_allowed_packet'";

        try
        {
            conn.Open();
            var reader = sql.ExecuteReader();
            // not sure where to go from here
        }
        catch (Exception ex)
        {
            // I've got some logging here
        }
    }
    return max;
}

我怀疑查询的格式或执行是错误的,因为我的结果总是

-1

编辑:

我已经编辑了代码以使用sql.ExecuteReader(),但现在的结果是:

“枚举没有结果”。

【问题讨论】:

  • 运行 executenonquery,不返回数据 - 所以......你不能要求“选择东西”来返回你的值。
  • @BugFinder 谢谢。我已将其更改为sql.ExecuteReader();,但查询返回“枚举未产生任何结果”。读取值的正确方法是什么?
  • 如果您只期望返回一个值,那么 ExecuteScalar 可能更容易使用
  • @ADyson ExecuteScalar 似乎只返回第一个值,在本例中为字符串"max_allowed_packet"
  • @ToshiBoy 没问题,我不确定它会返回什么。您的答案是正确的,使用 DataReader 您必须执行 Read() 命令才能移至第一行(然后再次执行以移至后续行 - 人们通常将while (reader.Read()) { ... } 用于读取多行中的所有行结果集

标签: c# mysql max-allowed-packet


【解决方案1】:

最终我自己想通了,想把它贴在这里,在这被更多人否决之前......

var reader = sql.ExecuteReader();
reader.Read();
max = reader.GetInt32(1);

最好放一些try catch,您可以选择通过reader.GetString(0)查询第一个字段,它应该返回“max_allowed_pa​​cket”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 2019-12-04
    • 2010-10-30
    • 1970-01-01
    • 2023-03-11
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多