vb.net SQL更新查询无法完成

Posted

技术标签:

【中文标题】vb.net SQL更新查询无法完成【英文标题】:vb.net SQL update query cannot completed 【发布时间】:2016-05-16 19:47:59 【问题描述】:

我正在尝试在 vb.net 应用程序中执行此更新查询:

SQL = "UPDATE billing_calldata SET status = 'c', customer = '" & customer_sequence & "', description = '" & description & "', customer_cost = '" & customer_cost & "', customer_ac = '" & customer_ac & "', customer_sc = '" & customer_sc & "', reseller_cost = '" & reseller_cost & "', reseller_ac = '" & reseller_ac & "', reseller_sc = '" & reseller_sc & "' WHERE sequence = '" & sequence & "';"

但它需要很长时间,甚至没有完成。

关于ExecuteNonQuery()它的说法:

Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

什么可能导致它无法完成?

我已经复制了查询(使用正确的值)并尝试直接在服务器上运行大约需要 49 秒(但它实际上完成了)

我在表格中的sequence 列上添加了索引

【问题讨论】:

如果客户说Ziggy's Hardware,您知道以这种方式创建 SQL 会崩溃吗?并且它迫使那些成本项目串起来?使用 SQL 参数 你对换行有什么看法? @Plutonix 客户列只是一个整数,所以永远不会有任何' 好的,'" & customer_sequence & "' 会将整数转换为字符串。始终使用 SQL 参数 【参考方案1】:

您可以尝试将 CommandTimeout 设置为更高的值。 Sql Server 的默认值为 30 秒,我对 mysql 没有参考,但它可以相等。因此,如果您在服务器上执行的命令需要 49 秒,那么从您的代码中超时 30 秒肯定是个大问题。

 command.CommandTimeout = 60

但是,让我警告您查询中存在更大的问题。使用 Sql 注入方案可以轻松破解此查询。最好尽快搜索参数化查询并改变您的编码习惯。

编辑 MySqlCommand 的超时时间与 Sql Server 一样为 30 秒。Found a reference here

【讨论】:

使用的时候看MySqlConnectionStringBuilder.ConnectionTimeout,默认是15 确认!抱歉,我弄糊涂了。 我了解 Sql 注入问题,但这个应用程序只被我使用过,它是如何编写的,所以没关系。我只是想知道为什么查询需要这么长时间才能直接在 SQL 服务器上运行(不使用 vb.net)——这对我来说似乎是一个相当简单的查询? 我不同意,只是不是Sql Injection的问题,也是解析的问题。如果您的字段不是字符串类型,则数据库引擎需要将每个值转换为适当的类型(数字、日期、小数),并且可能会丢弃索引查找导致这些转换。更不用说单引号问题了。例如,如果“描述”值包含单引号怎么办?为避免语法错误,您必须执行 Replace 以使单引号加倍。最后,您的字符串 sql 成为维护和可理解性的噩梦。相信我,参数让您的生活更轻松。 但即使直接在 phpmyadmin 中运行查询也需要很长时间 - 它不仅仅是 vb.net

以上是关于vb.net SQL更新查询无法完成的主要内容,如果未能解决你的问题,请参考以下文章

VB.Net 中的 SQL 查询

如何从 VB.NET 的视图中获取 SQL 查询

在 VB.NET 中结合了这两个 sql 查询

将 sql 查询填充到 vb.net 上的 datagridview 中

从 VB.NET 复选框选项构建 SQL 查询时遇到问题

VB.Net/Access SQL 插入子查询问题