gpt4 book ai didi

mysql - vb.NET "{0}"连接在 MySQL 命令中不起作用,但 "&"可以

转载 作者:行者123 更新时间:2023-11-29 23:10:09 25 4
gpt4 key购买 nike

我一直在尝试在 vb.NET 中发送一个很长的 MySQL 命令。当我想使用变量作为 MySQL 命令字符串的一部分时,我一直使用“&”连接字符串。

这可行,但让我的代码看起来很困惑,所以我尝试使用“{0}、{1}”等。

但这不起作用,我收到错误:

Overload resolution failed because no accessible 'New' accepts this number of arguments.

示例:

connector.Open()
commander = New MySqlCommand("UPDATE 'pupil_data' SET '" & Question & "'='" & Answer & "' WHERE 'username'=" & Environment.UserName & ";", connector)
dataAdapter = New MySqlDataAdapter(commander)
connector.Close()

但是,这有效:

connector.Open()
commander = New MySqlCommand(("UPDATE 'pupil_data' SET '{0}'='{1}' WHERE 'username'='{2}'", Question, Answer, Environment.Username), connector)
dataAdapter = New MySqlDataAdapter(commander)
connector.Close()

不起作用。这可能只是我的包围的问题,但我已经尝试了几种组合,并且它在逻辑上是合理的(我认为)。

最佳答案

“{n}”名称并不代表自动连接,而是用作 String.Format 一部分的格式占位符。带有占位符的字符串不会自动知道如何处理它。您的 MySQLCommand 对象当然不知道如何使用它,因此您会收到错误。例如:

connector.Open()
Dim SQL As String = String.Format("UPDATE pupil_data SET '{0}'='{1}' WHERE 'username'='{2}'",
Question, Answer, Environment.Username)
commander = New MySqlCommand(SQL, connector)
dataAdapter = New MySqlDataAdapter(commander)
connector.Close()

我也不确定您是否需要 SQL 中的所有这些勾选。请注意,如果像 Question 这样的内容是数字,则需要转换为字符串:

Dim SQL As String = String.Format("Update ...", 
Question.ToString, Answer.ToString, Environment.Username)

还有一些东西,例如 Console.WriteLineStringBuilder.AppendFormat 也会自动实现此功能。

参见String.Format

请注意,这绝对是创建 SQL 的错误方法。如果用户名例如是 D'Artagnan,则查询将会阻塞。 String.Format 不能保护您免受 SQL 注入(inject),它只是比将字符串位连接在一起更简洁的代码。

关于mysql - vb.NET "{0}"连接在 MySQL 命令中不起作用,但 "&"可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28118724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com