【发布时间】:2015-07-07 01:34:42
【问题描述】:
当我有多个 select 语句与 insert 语句或其他不返回数据集的语句分隔时,在调用 NextResult 时,DataReader 不会返回最后一个数据集。
例如,我有以下 sql 语句要通过 SqlCommand 执行到 DataReader
select * from testing;
insert into testing (test) values ('testing here');
select * from testing;
我执行sql:
IDbCommand command = MyConnection.CreateCommand();
command.CommandText = statement;
var reader = (System.Data.Common.DbDataReader)command.ExecuteReader();
我想回来:
- 第一个选择语句的结果集
- insert 语句影响的记录
- 第二个选择语句的结果集
相反,我收到了第一个结果集,然后当我执行 NextResult() 时,返回的是 false。
如果我运行两个后续选择,但是结果集都会返回 即。
select * from testing
select * from testing2
我尝试仅解析 ; 并分别执行命令。
但是,从长远来看,这不会奏效,因为最终我将有一个用例来提交匿名查询或创建一个在命令中包含分号的存储过程。
如何遍历具有混合数据结果和没有返回的查询的DataReader?
【问题讨论】:
-
这是哪个数据库?您使用的是哪个提供商软件?您是否尝试过将语句包装在存储过程代码块中?它实际上可能比您预期的要好。
-
@sstan 我一直在针对 postgres 数据库进行测试。我尝试使用 npgsql.net 和 odbc 驱动程序执行,结果相同。此实用程序将允许用户键入查询,因此将其放入存储过程不会很不幸。
-
我正在使用不可知的
Common命名空间,希望也能支持多个服务器(mysql、sqlserver)。
标签: c# sql datareader