0
我已经成功地创建一个用户名=“根”和主机=“127 .0.0.1”,使用mysql命令(客户端模式)如下:创建存储过程(服务器模式)的MySQL用户
sql = String.Format("CREATE USER '{0}'@'{1}' IDENTIFIED BY '{2}'; GRANT ALL PRIVILEGES ON * . * TO '{0}'@'{1}' IDENTIFIED BY '{2}' WITH GRANT OPTION;", userName, serverHost, userPassword)
当上面的脚本将其更改为存储过程(服务器模式)时,我发现如下错误:(错误1064-您的SQL语法中有错误;请检查与Yout MySQL服务器版本对应的手册为正确的语法使用附近'通过'在线1)
ScriptExec(String.Format("DROP PROCEDURE IF EXISTS mySchema.SP_CreateUser $$" +
"CREATE [email protected] PROCEDURE {0}.SP_CreateUser(IN userName VARCHAR(250), IN serverHost VARCHAR(250), IN userPassword VARCHAR(250)) " +
"BEGIN " +
"SET @buf = CONCAT('CREATE USER ',userName,'@',serverHost,' IDENTIFIED BY ',userPassword); PREPARE stmt FROM @buf; EXECUTE stmt; DEALLOCATE PREPARE stmt;" +
"SET @buf1 = CONCAT('GRANT ALL PRIVILEGES ON * . * TO ',userName,'@',serverHost,' IDENTIFIED BY ',userPassword,' WITH GRANT OPTION'); PREPARE stmt1 FROM @buf1; EXECUTE stmt1; DEALLOCATE PREPARE stmt1;" +
"END $$"))
Public Function ScriptExec(ByVal sql As String) As Boolean
Dim stsResult As Boolean = Nothing
Dim has As Integer = Nothing
Dim script As New MySqlScript(objCon, sql)
script.Delimiter = "$$"
Try
has = script.Execute()
If has > 0 Then stsResult = True
Catch ex As MySqlException
MessageBox.Show("Error occurred in ScriptExec Function" & vbCrLf & ex.Number & " – " & ex.Message)
Finally
script.Delimiter = ";"
End Try
Return stsResult
End Function
有没有解决我上面的问题?
感谢&最好的问候,
Yudha
我在ScriptExec函数中使用了script.Delimiter =“$$”。发生错误的可能性是因为格式CREATE USER username @ serverHost,应该CREATE USER'username'@'serverHost'。那里有一个开头和结尾的报价。我如何在CONCAT中使用开始和结束的引号,因为我使用了userName和serverHost的变量? – Yudha 2011-05-17 16:56:31
是的,我期望的。我更改我的用户名'@',userPassword成为QUOTE(用户名),'@',QUOTE(serverHost)和'IDENTIFIED BY',userPassword)为'IDENTIFIED BY',QUOTE(userPassword))。所有现在正常运作。感谢你们对我的帮助。 // Yudha – Yudha 2011-05-17 17:17:19