从C#连接对象中直接提取MySql连接ID

时间:2018-03-13 13:24:49

标签: c# mysql .net

我想知道是否有办法确定C#端MySql Connection使用的Connection ID和LocalEndpoint的端口。

我知道我可以跑:

select * from information_schema.processlist
where id = connection_id();

但是,我的问题是我是否可以在不执行此SQL语句的情况下获取这些详细信息(或至少是连接ID),也就是说,直接来自Connection对象本身(因为此信息存在于连接的基础类型和TCP中)插座)

谢谢:)

2 个答案:

答案 0 :(得分:2)

connection_id()函数的文档说它返回当前连接的线程ID。如果您查看MySqlConnection的文档,您可能会发现ClientConnectionId的MySqlConnection等效项为ServerThread - 我已经完成了一些测试&发现它包含与查询返回的值相同的值 - 但可能无法保证。

我还没有找到一种从公共可访问的属性/方法中确定TCP端口的方法。

答案 1 :(得分:0)

连接字符串被解析为Connection类的Properties。一旦处理完毕,它可能已停止存在。查看您可以使用的Propeties:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx#Properties

至于获取连接细节 - 这是有问题的。在内部,SQLConnection类正在进行连接池。因此,相同的低级别连接可能会重新用于不久之后发出的请求。就像线程ID一样,你不应该在代码中真正访问它。

即使在执行期间,这些值也可能会发生变化而没有任何明显的转发,押韵或理由(仍然有一个原因,但很难得到一个不错的猜测)。行为可能会在“框架版本”,“毫秒内的特定情况”之间发生变化,或者即使您的祖母访问或者您今天有满月也是如此。