c# & MySQL-Prepared: Fatal Error

OP #3508358
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
Gast #3508374
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();

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.