Σύνδεση σε MySQL με .NET Connector
Παράδειγμα κώδικα για σύνδεση με MySQL μέσω .NET Connector και λύση στο σφάλμα 'SELECT command denied' μέσω Use Procedure Bodies=false στο connection string.
Το ακόλουθο παράδειγμα κώδικα μπορεί να χρησιμοποιηθεί για την πρόσβαση σε μια βάση δεδομένων MySQL μέσω του .NET Connector της MySQL:
Μπορείτε μόνοι σας να κάνετε deploy το driver της MySQL στο web hosting σας, μπορεί να ληφθεί από την ιστοσελίδα της MySQL.
using MySql.Data.MySqlClient;
MySqlConnection con = new MySqlConnection();
string mysql = "Server=[server];Database=[database];User=[brugernavn];pwd=[password]";
con.ConnectionString = mysql;
con.Open();
MySqlCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT * FROM TestTabel";
cmd.Connection = con;
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Response.Write(reader.GetValue(0).ToString());
}
cmd.Dispose();
con.Close();
Σφάλμα: SELECT command denied to user 'user'@'x' for table 'proc'
Η αιτία είναι ένα σφάλμα στο driver της MySQL. Τεκμηριωμένο εδώ:
http://bugs.mysql.com/bug.php?id=10640
http://bugs.mysql.com/bug.php?id=16703
http://bugs.mysql.com/bug.php?id=14836
Μια διεργασία προσπαθεί να εκτελέσει μια εντολή SELECT στον πίνακα proc. Αυτός ο πίνακας 'proc' είναι ένας πίνακας συστήματος, ο οποίος αποθηκεύει procedures για όλους τους χρήστες στον διακομιστή MySQL. Στο shared hosting, η πρόσβαση σε αυτόν τον πίνακα αποτελεί πρόβλημα, καθώς η πρόσβαση θα έδινε στους πελάτες τη δυνατότητα να βλέπουν τις procedures ο ένας του άλλου.
Μια πιθανή λύση στο πρόβλημα είναι να αλλάξετε το connection string σας, ώστε να περιέχει "Use Procedure Bodies=false".
Παράδειγμα:
"server=localhost; user id=dbuser; password=password; database=dbname; Use Procedure Bodies=false;"
Άρθρο από την κατηγορία υποστήριξης: ASP & ASP.NET