我一直在尝试在vb.NET中发送一个很长的MySQL命令。当我想将变量用作MySQL命令字符串的一部分时,我一直使用“&”连接字符串。
这有效,但是我的代码看起来很乱,所以我尝试使用“{0},{1}”等。
然而,这不起作用,我收到错误:
重载解析失败,因为没有可访问的'New'接受此数量的参数。
示例:
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()
不起作用。它可能只是我的包围问题,但我尝试了几种组合,它在逻辑上是合理的(我认为)。
答案 0 :(得分:0)
" {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注入,它只是比串联字符串更简洁的代码。