OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable dataTable = oleDbDataReader.GetSchemaTable();
GetSchemaTable()
如何工作?它在RDBMS中从何处获取其信息?
最佳答案
IDataReader.GetSchemaTable()
的实现取决于提供者-因此会有所不同。您可以编写自己的提供程序,并按您想要的任何方式进行操作。
老实说,这在框架中是不好的设计-永远不要有返回无类型DataTable
或DataSet
的接口(interface)方法,因为该结果可能包含任何内容。首先,Kinda克服了通过接口(interface)来限制它的观点:“您必须具有返回DataTable
的方法,但我们不在乎它具有的行或列”
即使提供程序是SQL,GetSchemaTable()
也不会返回到[syscolumns]
或[sysobjects]
。那将是一个额外的数据库调用,需要额外的特权,而且无论如何都无法正常工作,因为结果集不需要反射(reflect)数据库中的任何对象。
我不确定,但是我希望绝大多数IDataReader.GetSchemaTable()
实现都能读取结果集中保存的元数据的某些属性。
关于c# - GetSchemaTable()如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1574492/