vb.NET" {0}"连接在MySQL命令中不起作用但是"&"不

时间:2015-01-23 21:05:12

标签: mysql vb.net concatenation

我一直在尝试在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()

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

1 个答案:

答案 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.WriteLineStringBuilder.AppendFormat也会自动实现此功能。

请参阅String.Format

请注意,这绝对是创建SQL的错误方法。如果用户名为D'Artagnan,则查询将会阻塞。 String.Format不能保护你免受SQL注入,它只是比串联字符串更简洁的代码。