Forum: PC-Programmierung c# & MySQL-Prepared: Fatal Error


von Matthias S. (da_user)


Lesenswert?

Hi,

ich bastel mir gerade eine Anwendung die die externe 
MySQL-XBMC-Datenbank auslesen soll. Derzeit experimentiere ich noch rum. 
Dieser Code funktioniert einwandfrei:
1
        public ArrayList GetMovieView2()
2
        {
3
            string command = @"Select `idMovie`,`idFile` FROM `xbmc_video75`.`movieview`;";
4
            MySqlCommand sqlCommand = connection.CreateCommand();
5
            sqlCommand.CommandText = command;
6
            MySqlDataReader Reader;
7
            connection.Open();
8
            Reader = sqlCommand.ExecuteReader();
9
            ArrayList Rückgabe = new ArrayList();
10
            int ordinalIdMovie = Reader.GetOrdinal("idMovie");
11
            int ordinalIdFile = Reader.GetOrdinal("idFile");
12
13
            while (Reader.Read())
14
            {
15
                Rückgabe.Add("IDMovie: " + Reader[ordinalIdMovie] + " IDFile: " + Reader[ordinalIdFile]);
16
            }
17
            connection.Close();
18
            return Rückgabe;
19
        }

Das ganze wollte ich jetzt auf Prepared-Commands umbauen, und bekomme 
damit Probleme. Hier mal der Code:
1
        public ArrayList GetMovieView3()
2
        {
3
            MySqlCommand cmd = connection.CreateCommand();
4
            cmd.Connection.Open();
5
            cmd.CommandText = "Select ?MovieID,?FileID FROM ?DataTable.?DataView;";
6
            cmd.Prepare();
7
8
            cmd.Parameters.AddWithValue("?MovieID", "idMovie");
9
            cmd.Parameters.AddWithValue("?FileID", "idFile");
10
            cmd.Parameters.AddWithValue("?DataTable", "xbmc_video75");
11
            cmd.Parameters.AddWithValue("?DataView", "movieview");
12
13
            cmd.Prepare();
14
15
            MySqlDataReader Reader;
16
            Reader = cmd.ExecuteReader();
17
            ArrayList Rückgabe = new ArrayList();
18
            int ordinalIdMovie = Reader.GetOrdinal("idMovie");
19
            int ordinalIdFile = Reader.GetOrdinal("idFile");
20
21
            while (Reader.Read())
22
            {
23
                Rückgabe.Add("IDMovie: " + Reader[ordinalIdMovie] + " IDFile: " + Reader[ordinalIdFile]);
24
            }
25
            connection.Close();
26
            return Rückgabe;
27
        }

Und zwar schmeißt mir Visual Studio für die Zeile "Reader = 
cmd.ExecuteReader();" folgenden aussagekräftigen Fehler:

"Ein Ausnahmefehler des Typs "MySql.Data.MySqlClient.MySqlException" ist 
in MySql.Data.dll aufgetreten.
Zusätzliche Informationen: Fatal error encountered during command 
execution."

Ich habe jetzt natürlich schon gegoogelt und bin da hauptsächlich auf 
das Problem gestoßen, dass die Beispiele alle zum Einfügen von Daten in 
die DB sind, ich will aber Daten abfragen. Auch kamen dann anfragen für 
ganz komplizierte Befehle.

Vielleicht kann mir ja wer von euch auf die Sprünge helfen.

Danke auf jeden Fall schonmal fürs "zu Gemühte führen" meines Codes ;-)

VG
Matthias

von Mladen G. (mgira)


Lesenswert?

Ins Blaue geraten: Die Tabellennamen sollten nicht parametrisiert 
werden.

Probiers mal mit den echten Tabellennamen.

von Peter II (Gast)


Lesenswert?

Matthias S. schrieb:
> Vielleicht kann mir ja wer von euch auf die Sprünge helfen.

Meines Wissens werden nur echte Parameter und keine Spaltennamen 
unterstützt. Es macht auch wenig sinn die Spaltennamen dynamisch zu 
machen. Sinn ist doch das der SQL-Server das gleiche Statement für 
verschiede Daten nutzen kann.

Auch werden Spaltennamen nicht als String übergeben.

MySqlCommand cmd = connection.CreateCommand();
cmd.Connection.Open();
cmd.CommandText = "Select MovieID, FileID FROM DataTable.DataView where 
MovieID = @ID;";
cmd.Parameters.AddWithValue("@ID", 5);
MySqlDataReader Reader;
Reader = cmd.ExecuteReader();

von Matthias S. (da_user)


Lesenswert?

Also wäre es für diese Abfrage besser, bei dem alten Schema zu bleiben. 
Alles klar.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.