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.WriteLine
、StringBuilder.AppendFormat
等一些东西也会自动实现。
请注意,这绝对是创建 SQL. 的错误方法,例如,如果用户名是 D'Artagnan
,查询将会阻塞。 String.Format 不会保护您免受 SQL 注入,它只是比将字符串位连接在一起更简洁的代码。
我一直在尝试在 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.WriteLine
、StringBuilder.AppendFormat
等一些东西也会自动实现。
请注意,这绝对是创建 SQL. 的错误方法,例如,如果用户名是 D'Artagnan
,查询将会阻塞。 String.Format 不会保护您免受 SQL 注入,它只是比将字符串位连接在一起更简洁的代码。