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