PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [VB .NET + MySQL]: Problem mit versch. Variablentypen und deren Konvertierung


mf_2
2006-07-01, 17:41:09
Hallo,

Ich habe ein kleines Programm geschrieben, das mithilfe des MySQL Connector .NET ein paar Daten aus einer MySQL Tabelle ausliest. Das klappt auch wunderbar. Nun aber mein Problem:

Folgende Zeile mag der Debugger nicht:

albumdateneu = myReader.GetValue(myReader.GetOrdinal("mm")) + " / " + myReader.GetValue(myReader.GetOrdinal("dd")) + " / " + myReader.GetValue(myReader.GetOrdinal("jjjj"))

Wie ihr sicher schon ahnen könnt, soll das Erstellungsdatum eines Photoalbums aus einer MySQL tabelle ausgelesen werden und dann in albumdateneu gespeichert werden.

Nun scheint er es aber nicht zu mögen, dass die Monats, tages und Jahreszahlen Integers sind, oder eben doubles. Albumdateneu ist nämlich ein String und wurde am Anfang auch mithilfe dieser beiden Zeilen

Dim albumdateneu As String
albumdateneu = 0

als solcher deklariert.

Das ist die Fehlermeldung, die ich sowohl in Visual Basic .NET Expres 2005 beim Debuggen als auch beim Ausführen des Programms bekomme:


Conversion from string " /" to type 'Double' is not valid.


Wie bekomme ich das mit den Typen korrekt hin? Leider bin ich immer noch ein VB .NET Neuling, ich habe mich nur vor nem knappen Jahr mal kurz damit beschäftigt ( SuFu im Programmierforum nach Beiträgen von mir gibt auch darüber Aufschluss ;) ), und leider schon wieder einiges vergessen.
Danke schonmal für eure Hilfe!

FlashBFE
2006-07-01, 18:03:46
Ok, das kleine String 1x1 ;):

Strings brauchste nicht mit X = 0 initialisieren. VB ist kein C++.
Entweder garkeine Initialisierung oder X = "" oder X = Nothing.

Das Zusammensetzen von Zeichenketten (Konkatenation) funktioniert über den &-Operator. Bei + versucht er eine Typumwandlung in ein Zahlenformat, woraus der Fehler bei dir entsteht.

Und um explizit die Typumwandlung der GetValue Funktion nach String vorzugeben, kannste das Ganze auch in den Cast Operator CStr() reinschreiben. Das ist aber nicht unbedingt notwendig, bei VB funktioniert die implizite Typumwandlung genauso gut.

mf_2
2006-07-01, 18:25:17
Danke, Problem gelöst!

mf_2
2006-07-01, 18:41:37
Leider habe ich jetzt noch ein Problem, das im Prinzip ähnlich ist, daher kein neuer Thread. Ich will 3 Spalten aus einer MySQL-Tabelle auslesen. Sie heissen id, name und url. sie sollen später in einem datagrid angezeigt werden. bei den feldern id (integer) und url (string) geht das auch ganz gut, nun ist das name-feld aber leider ein binary(also ein blob ) feld, das macht probleme bei der Ausgabe. Deswegen würde ich gerne das name-feld im programm ( also ned in der datenbank direkt ) temporär in einen string konvertieren. wie ist das möglich?

Hier das Codefragment mit MySQL-Abfrage und Erstellung des DataGrids.

conn.ConnectionString = SQL

SQL = "SELECT id,url " _
& "FROM favorites " _
& "WHERE(uid=" _
& myUserID _
& ")"

Try
conn.Open()

Try
myCommand.Connection = conn
myCommand.CommandText = SQL

myAdapter.SelectCommand = myCommand
myAdapter.Fill(myData)

dgvStatus.DataSource = myData

Catch myerror As MySqlException
MsgBox("There was an error reading from the database: " & myerror.Message)
End Try
Catch myerror As MySqlException
MessageBox.Show("Error connecting to the database: " & myerror.Message)
Finally
If conn.State <> ConnectionState.Closed Then conn.Close()
End Try


Könnt ihr mir weiterhelfen?

Ich habe auch mal zeilenweises debuggen versucht, aber der debugger zeigt mir die zeile mit dem fehler ned explizit. der debugger zeigt genau genommen garkienen fehler. es ist das programm, es bringt scheinbar eine endlosschleife von ein- un derselben fehlermeldung. Es liegt aber definitv am name-feld, da es einwandfrei geht, wenn ich dieses feld bei der SELECT-abfrage weglasse. es hat auch einwandfrei gefunzt als das name-feld noch ein string (varchar) war.