Ich verwende den MySqlConnector/NET um User in einer Datenbank zu erstellen:
Das funktioniert problemlos und der User wird so erstellt.
Aber jetzt möchte ich, dass der User-Name und der Host so wie das Passwort aus einer Variable kommt. Der User-Name wird aus anderen Daten, die in Textboxen eingegeben werden, zusammengestellt, also ich kann das nicht einfach in den Query-String einfügen.
Das Problem ist, ich weiß nicht, wie ich die beiden Teile angeben soll.
Mit dem User-Name alleine funktioniert es so:
Und das erstellt einen User
Folgendes hab ich probiert:
Alles Syntaxfehler.
Ebenfalls alles Syntaxfehler.
Erstellt einen User, der wortwörtlich
"Malformed hostname (illegal symbol: '@')"
Syntaxfehler.
Also wie muss ich das machen?
Es gäbe natürlich noch die Möglichkeit, direkt in die mysql.user-Tabelle einzufügen, aber das möchte ich vermeiden. Es ist auch möglich, die Namen zu escapen und direkt in den Query-String einzufügen, aber da PreparedStatements zumindest nur mit dem Namen und ohne Host funktioniert, sollte es irgendwie mit Host funktionieren.
VB.NET-Quellcode
- Using Connection = New MySql.Data.MySqlClient.MySqlConnection(New MySql.Data.MySqlClient.MySqlConnectionStringBuilder() With { _
- .Server = "localhost", _
- .CharacterSet = "utf8", _
- .SslMode = MySql.Data.MySqlClient.MySqlSslMode.Preferred, _
- .Password = "Geheim", _
- .UserID = "root"}.ConnectionString)
- Connection.Open()
- Using Command = Connection.CreateCommand
- Command.CommandText = "CREATE USER 'Niko'@'localhost' IDENTIFIED BY @Password;"
- Command.Prepare()
- Command.Parameters.AddWithValue("@Password", "Geheim")
- Command.ExecuteNonQuery()
- End Using
- End Using
Das funktioniert problemlos und der User wird so erstellt.
Aber jetzt möchte ich, dass der User-Name und der Host so wie das Passwort aus einer Variable kommt. Der User-Name wird aus anderen Daten, die in Textboxen eingegeben werden, zusammengestellt, also ich kann das nicht einfach in den Query-String einfügen.
Das Problem ist, ich weiß nicht, wie ich die beiden Teile angeben soll.
Mit dem User-Name alleine funktioniert es so:
Niko
mit dem Host %
, also da muss jetzt noch der Host-Teil rein.Folgendes hab ich probiert:
VB.NET-Quellcode
- Command.CommandText = "CREATE USER @Name @ @Host IDENTIFIED BY @Password;" 'bzw.
- Command.CommandText = "CREATE USER @Name@@Host IDENTIFIED BY @Password;" 'bzw.
- Command.CommandText = "CREATE USER @Name\@@Host IDENTIFIED BY @Password;"
- Command.Parameters.AddWithValue("@Name", "Niko")
- Command.Parameters.AddWithValue("@Name", "localhost")
VB.NET-Quellcode
- Command.CommandText = "CREATE USER :Name @ :Host IDENTIFIED BY :Password;" 'bzw.
- Command.CommandText = "CREATE USER :Name@:Host IDENTIFIED BY :Password;" 'bzw.
- Command.CommandText = "CREATE USER :Name\@:Host IDENTIFIED BY :Password;"
- Command.Parameters.AddWithValue(":Name", "Niko")
- Command.Parameters.AddWithValue(":Host", "localhost")
'Niko'@'localhost'
bzw. Niko@localhost
heißt mit dem Host %
. War zu erwarten, aber es war einen Versuch wert.Also wie muss ich das machen?
Es gäbe natürlich noch die Möglichkeit, direkt in die mysql.user-Tabelle einzufügen, aber das möchte ich vermeiden. Es ist auch möglich, die Namen zu escapen und direkt in den Query-String einzufügen, aber da PreparedStatements zumindest nur mit dem Namen und ohne Host funktioniert, sollte es irgendwie mit Host funktionieren.
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils