vb.net - 如何设置 Npgsql 的超时值?
问题描述
我习惯于CommandTimeout=5
设置超时,但它并不好。
这是我的代码:
Dim con As New NpgsqlConnection
Dim cmd As New NpgsqlCommand
Dim conStr As String
Try
Dim sql = "Select * from dat_extract_text a join dat_replace_text b on a.tm_id=b.tm_id
join dat_base_text_dt c on c.tm_id=a.tm_id
join dat_base_text_dt_font d on d.tm_id=c.tm_id
limit 250000"
conStr = "Server=192.168.1.10;Port=5434;UserId=testuser;Password=1234;Database=testdb;CommandTimeout=5;"
con.ConnectionString = conStr
con.Open()
cmd.Connection = con
cmd.CommandText = sql
Dim st = DateTime.Now
Dim rs = cmd.ExecuteNonQuery
Dim et = DateTime.Now
Dim t = (et - st).TotalSeconds
Catch ex As Exception
End Try
我的查询时间约为 40 秒,但不会发生超时。
如何设置 Npgsql 的超时值?
解决方案
让我们稍微整理一下您的代码。
连接和命令需要关闭和处理。Using...End Using 块会为您解决这个问题。
您可以将连接字符串直接传递给构造函数。同样,命令文本和连接可以传递给命令的构造函数。
如果您想计时,请使用 .net 中的 Stopwatch 类。
Select 语句不是 NonQuery。它将返回一个结果集。使用 DataTable 将允许您使用数据。
一个空的 Catch 没有任何帮助,因为它只会吞下错误,而您不知道出了什么问题。
Private Sub OPCode()
Dim sql = "Select * from dat_extract_text a join dat_replace_text b on a.tm_id=b.tm_id
join dat_base_text_dt c on c.tm_id=a.tm_id
join dat_base_text_dt_font d on d.tm_id=c.tm_id
limit 250000"
Dim dt As New DataTable
Using con As New NpgsqlConnection("Server=192.168.1.10;Port=5434;UserId=testuser;Password=1234;Database=testdb;"),
cmd As New NpgsqlCommand(sql, con)
'cmd.CommandTimeout = 5
con.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Sub
以这种方式测试代码,没有超时并且没有 Try...Catch 以查看错误发生在哪一行以及错误是什么。
推荐阅读
- mysql - 如何在 mysql 数据透视表中获取动态年份数据
- php - 在php中获取二进制数据大小的正确方法是什么?
- javascript - Bootstrap Twitter 关闭模式重定向
- python-3.x - 无法从 URL 读取请求 HTML 响应
- django - 芹菜不注册周期性任务
- docker - DockerFile 和环境变量
- json - JSON解码成变体模型Swift4
- php - 在内部连接查询 PHP + MySQL 中查找具有相同名称的用户
- scala - 查询完整的 cassandra 表时,Spark Job 只会停止
- javascript - 如何从端点 API 实时获取数据