c# - 从 SqlDataReader 访问命令对象

标签 c# sql-server

有一个 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/

相关文章:

SQL Server : Select Where String Doesn't Contain Certain Value

sql - 如何在 SQL Server 中获取 YY 格式的年份

c# - C# 中具有多个接口(interface)的属性可访问性

sql - 为什么这个 SQL 脚本会这样工作?

sql-server - 如何连接子查询的第一行?

sql - 微软SQL服务器: check users own permissions

c# - 将文件移动到 FTP 上的父文件夹

c# - c# - 如何将函数传递给具有不同参数的函数并执行它

c# - 在 monogame 中调试

c# - 正则表达式和冒号 ( :)