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更新查询无法完成的主要内容,如果未能解决你的问题,请参考以下文章