GetSchemaTable()如何工作?

use*_*312 6 c# oledbdatareader getschematable

OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable dataTable = oleDbDataReader.GetSchemaTable();
Run Code Online (Sandbox Code Playgroud)

GetSchemaTable()工作怎么样?

它在RDBMS中从何处获取信息?

Kei*_*ith 6

实施IDataReader.GetSchemaTable()取决于提供者 - 因此会有所不同.您可以编写自己的提供程序,并以您想要的任何方式执行.

说实话,这在框架中是糟糕的设计 - 你永远不应该有返回无类型的接口方法,DataTable或者DataSet因为结果可能包含任何东西.Kinda首先忽略了通过接口约束它的点:"你必须有一个返回的方法,DataTable但我们不关心它有哪些行或列"

即使提供者是SQL GetSchemaTable()也不会回到[syscolumns][sysobjects].这将是一个额外的数据库调用,需要额外的权限,无论如何都不起作用,因为结果集不需要反映数据库中的任何对象.

我不确定,但我希望绝大多数IDataReader.GetSchemaTable()实现都能读取结果集中保存的元数据的某些属性.