#mysql #vb.net #stored-procedures
#mysql #vb.net #хранимые процедуры
Вопрос:
Я успешно создал имя пользователя = ‘root’ и хост = ‘127 .0.0.1 ‘, используйте команду 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; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘pass’ в строке 1)
ScriptExec(String.Format("DROP PROCEDURE IF EXISTS mySchema.SP_CreateUser $$"
"CREATE DEFINER=root@localhost 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" amp; vbCrLf amp; ex.Number amp; " – " amp; ex.Message)
Finally
script.Delimiter = ";"
End Try
Return stsResult
End Function
Есть ли решение моей проблемы выше?
Спасибо и с наилучшими пожеланиями,
Юдха
Ответ №1:
Разве вы не пропускаете
DELIMITER $$
инструкция в начале вашего SQL-кода? Без этого движок не будет знать, как интерпретировать $$
.
Комментарии:
1. Я использовал скрипт. Разделитель = «$$» в функции ScriptExec. Возможна ошибка, поскольку формат CREATE USER username@serverHost, должен СОЗДАВАТЬ USER ‘username’@’serverHost’. Там есть открывающие и закрывающие кавычки. Как мне использовать открывающие и закрывающие кавычки в CONCAT, потому что я использую переменную для имени пользователя и хоста сервера?
2. Верно, чего я и ожидал. Я меняю свое имя пользователя, ‘@’, пароль пользователя на КАВЫЧКИ (username), ‘@’, QUOTE (serverHost) и ‘IDENTIFIED BY’, пароль пользователя) на ‘IDENTIFIED BY’, ЦИТАТА (пароль пользователя)). Теперь все функционирует нормально. Спасибо, что помогли мне. //Yudha