SQL Data Reader的CanGetColumnSchema与GetColumnSchema方法生效条件问询
DbDataReader鲜少文档化的列架构方法及生效条件
以下是SQL数据读取器中鲜少被文档记录的方法:
CanGetColumnSchema(DbDataReader)
获取一个值,指示DbDataReader是否可获取列架构。
GetColumnSchema(DbDataReader)
获取DbDataReader的列架构(DbColumn集合)。
当执行select * from table命令后调用这两个方法,若CanGetColumnSchema返回不支持,需满足以下条件才能让它返回true且GetColumnSchema生效:
- 使用支持该方法的ADO.NET提供程序:并非所有数据库提供程序都实现了这两个方法。比如.NET Framework 4.5及以上版本的SqlClient(针对SQL Server)、.NET Core/.NET 5+的SqlClient原生支持;部分旧版第三方提供程序、OleDb/ODBC的某些驱动可能未实现,此时需更换为支持的提供程序版本。
- 确保DataReader处于有效状态:必须在DataReader打开且未读取到结果集末尾时调用方法。如果DataReader已关闭、已释放,或者已经遍历完所有行,CanGetColumnSchema会返回false。
- 命令需返回有效结果集:执行的SQL命令必须能返回合法的结果集(比如
select * from table这类查询命令),而非非查询命令(如insert、update)。如果是存储过程,需确保存储过程确实返回了结果集,且提供程序支持从存储过程结果集中提取列架构。 - 避免限制结果集的CommandBehavior:执行命令时若指定了会屏蔽架构信息的行为(极少出现),需调整为默认的
CommandBehavior.Default;若仅需获取架构,可指定CommandBehavior.SchemaOnly,此时也能触发方法生效。
内容的提问来源于stack exchange,提问作者Satoro Inikei
相关产品推荐
相关产品推荐

