如何解决命令超时不会抛出
private void NpgSqlGetContracts(IList<Contract> con)
{
var conn = (NpgsqlConnection)Database.GetDbConnection();
List<Contract> contracts = new List<Contract>();
using (var cmd = new NpgsqlCommand("SELECT * FROM \"Contracts\";",conn))
{
cmd.CommandTimeout = 1;
cmd.Prepare();
int conCount= cmd.ExecuteNonQuery();
using (var reader = cmd.ExecuteReader(CommandBehavior.SingleResult))
{
while (reader.Read())
{
contracts.Add(MapDataReaderRowToContract(reader));
}
}
}
}
这里我有这个代码来尝试 postgres 中的命令超时,我尝试在 Visual Studio 中使用断点在本地调试它。我尝试了 ExecuteNonQuery 和 ExecuteReader 查询需要超过 1 秒来加载所有数据(我这里有超过 3 百万行)。但是命令超时设置为1秒。我想知道为什么这里没有抛出任何异常,我这里配置错了什么?
谢谢:)
解决方法
正如@hans-kesting 上面写的那样,命令超时不是整个命令的累积,而是每个单独的 I/O 生成调用(例如 Read
)。从这个意义上说,它旨在帮助解决运行时间过长(没有产生任何结果)或网络问题的查询。
您可能还想看看 PostgreSQL 的 statement_timeout
,它是整个命令的 PG 端超时。它也有它的问题,而且 Npgsql 永远不会为你隐式设置它 - 但你可以自己设置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。