OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable dataTable = oleDbDataReader.GetSchemaTable();
如何GetSchemaTable()
工作?
它在 RDBMS 中从哪里获取信息?
OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable dataTable = oleDbDataReader.GetSchemaTable();
如何GetSchemaTable()
工作?
它在 RDBMS 中从哪里获取信息?
的实施IDataReader.GetSchemaTable()
取决于提供者 - 所以它会有所不同。您可以编写自己的提供程序并以任何您想要的方式进行操作。
老实说,这在框架中是一个糟糕的设计——你不应该有返回无类型的接口方法,DataTable
或者DataSet
因为结果可能包含任何东西。Kinda 首先打破了通过接口限制它的观点:“你必须有一个返回的方法,DataTable
但我们不在乎它有哪些行或列”
即使提供程序是 SQLGetSchemaTable()
也不会返回到[syscolumns]
or [sysobjects]
。这将是一个额外的数据库调用,需要额外的权限并且无论如何都不起作用,因为结果集不需要反映数据库中的任何对象。
我不确定,但我希望绝大多数IDataReader.GetSchemaTable()
实现能够读取与结果集一起保存的元数据的一些属性。
GetSchemaTable() 读取 ADO.NET 返回的结果集上的元数据。
来自每个数据库中的系统表(例如,syscolumns、sysobjects 等)。