有一个 SqlDataReader
对象,我试图获取其相关命令的超时。例如,我使用它来创建我的 SqlDataReader
:
SqlCommand myCommand = new SqlCommand(query, some_connection);
_reader = myCommand.ExecuteReader();
在运行时使用可视化调试器,我可以使用以下方式访问它:
_reader.Command.CommandTimeout // Visual debugger
不,我怎样才能在我的代码中访问这个“属性”(我想将其公开为第三方库的属性)?
上下文:
我正在从第三个库访问阅读器,所以实际上我只能访问阅读器。我的问题是了解为什么我可以访问调试器中的命令而不是作为属性?场景背后的机制是什么,一些属性扩展,反射?
最佳答案
您将需要使用反射来获取 Command
属性,因为它被设置为内部
访问。这是调试器用来向您显示属性的内容。
PropertyInfo prop = _reader.GetType().GetProperty("Command",
BindingFlags.NonPublic | BindingFlags.Instance);
DbCommand cmd = (DbCommand)prop.GetValue(_reader);
int timeout = cmd.CommandTimeout;
附注您不应该真正对第三方组件进行单元测试 - 这相当于说“我不信任 .NET 框架来完成它的工作,所以我将检查它内部所做的一切”。如果您想测试它,请将单元测试放入第三方解决方案中。
关于c# - 从 SqlDataReader 访问命令对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27468951/