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

vb.NET "{0}" concatenation doesn't work in MySQL commands but "&" does

我一直在尝试在 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 注入,它只是比将字符串位连接在一起更简洁的代码。