2016-05-04 6 views
1

Ich habe eine Inline-Abfrage von Scheck gewähren ex.SHOW GRANTS FOR root @ 'localhost';Wie überprüft Show Grant in Inline-Abfrage mit C#?

Ich möchte es als Inline-Abfrage zu übergeben, aber es funktioniert nicht und wirft "aufgrund eines fehlerhaften Hostnamen (illegal Symbol: '@')

Hier ist mein Code:

//Username = "root" 
//Hostname = "localhost" 
//Query: "SHOW GRANTS FOR root @'localhost';" 
objConn.InitCommand(CommandType.Text, "SHOW GRANTS FOR @Username @'@Hostname';"); 
objConn.AddParameter(ref lngErrorNo, ref strErrorMsg, "@Username", MySqlDbType.String, ParameterDirection.Input, Username); 
objConn.AddParameter(ref lngErrorNo, ref strErrorMsg, "@Hostname", MySqlDbType.String, ParameterDirection.Input, Hostname); 
if (objConn.ExecuteCommandObjRsReader(ref reader, ref lngErrorNo, ref strErrorMsg) == false) 
    blnReturn = false; 

Es wirft" malformed Hostnamen (illegal Symbol: ‚@‘)“// throw von sQL

kann jemand vorschlagen, was ich hier fehlt

+0

Wird ein Fehler in 'InitCommand' oder' ExecuteCommandObjRsReader'? Ausgelöst. MySQL gibt einen Fehler mit einer Anweisung wie der folgenden zurück: mysql SHOW GRANTS FOR user @ '@ hostname'; // FEHLER 1105 (HY000): Fehlerhafter Hostname (unzulässiges Symbol '@') '. @Drew – wchiquito

Antwort

0

Trotz verschiedener Bindungen versuchen und auf der Suche, ich nicht in der Vergangenheit th bekommen kann? e eingebettet @ Zeichen in der Mitte des Befehls als mysql erwartet es. Das Zeichen vermasselt die Bindungen mit den anderen 2 Möchtegern-Parametern, die mit @ Zeichen beginnen.

Also musste ich mit Verkettung ohne normale Bindungen mit .Prepare() und .AddWithValue() bleiben.

Hinweis, das Folgende ist mit dem .Net MySQL Connector.

Getestet, iteriert die Schleife erfolgreich durch die Zeilen.

Ein Wort der Vorsicht: Verwenden Sie dies nur als Strohmann, bis sichere Bindungen mit vom Benutzer bereitgestellten Daten verwendet werden können.

public void ShowGrants(string pUsername, string pHostname) 
    { // 
     string sOut; 
     using (MySqlConnection lconn = new MySqlConnection(connString)) 
     { 
      lconn.Open(); 
      using (MySqlCommand cmd = new MySqlCommand()) 
      { // drewnow 

       cmd.Connection = lconn; 
       cmd.CommandText = "SHOW GRANTS FOR '"+pUsername+"'@'"+pHostname+"'"; 
       using (MySqlDataReader rs = cmd.ExecuteReader()) 
       { 
        while (rs.Read()) 
        { 
         sOut = rs.GetString(0); 
         // do something with it 
        } 
       } 
      } 
     } 
    } 
Verwandte Themen