首页 > 解决方案 > OracleCommand 并不总是尊重 SchemaOnly

问题描述

对于 SqlClient,我可以为很多查询指定 CommandBehavior.SchemaOnly 以获取查询结果架构。但是,当对 Oracle 使用相同的命令行为时,OracleClient 似乎执行查询而不是仅获取模式。在以下示例中,我可以看到该行确实已插入到我的数据库中,而我只是希望运行仅模式查询:

OracleCommand command = connection.CreateCommand();
command.CommandText = "insert into Test (ID, Name) values (1, 'test')";
var reader = command.ExecuteReader(CommandBehavior.SchemaOnly);
var dataTable = reader.GetSchemaTable();

我在 OracleClient 文档上找不到太多关于 CommandBehavior 的信息。OracleClient 是否实现此选项?或者我应该使用不同的方式在不运行查询的情况下获取架构?

标签: c#oracleado.netoracleclientcommand-behaviors

解决方案


这里的问题是SchemaOnly调用SET FMTONLY ON,它是一个 SQL Server TSQL 命令。

查询仅返回列信息。使用 SchemaOnly 时,用于 SQL Server 的 .NET Framework 数据提供程序在使用 SET FMTONLY ON 执行的语句之前。

使用它在OracleCommandBehavior 上不起作用,您需要找到另一种方法。

也许这个先前提出的问题可以提供帮助:

在 Oracle 查询中设置 FMTONLY ON


推荐阅读