PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL Query


tsaG
2011-04-28, 13:58:17
Hallo,

ich habe ein problem undzwar bekomme ich, wenn ich einen MySQL Query ausführe nur ein true (oder false, wenn der wert nicht in der DB ist) zurück, aber keinen Wert welcher in der Tabelle steht.

hier der MySQL Query
SELECT state.port FROM state WHERE state = 3


und hier der code

Public Function lesen(ByVal query) As String

conn.ConnectionString = My.Settings.mysqlconnectionstrings

Dim myConnection As New MySqlConnection(conn.ConnectionString)
Dim myCommand As New MySqlCommand(query)
myCommand.Connection = myConnection
myConnection.Open()
Dim reader = myCommand.ExecuteReader
Dim ergebnis As String = reader.Read()
myCommand.Connection.Close()
Return ergebnis
End Function

registrierter Gast
2011-04-28, 14:16:31
Ich kenne zwar diese Programmesprache nicht, aber das Problem wird einfach sein, dass du lediglich ausliest, ob ein Ergebnis gefunden wurde oder nicht. Ich kann nicht erkennen, wo du im Code direkt das Resultat von 'state.port' anforderst.

Was ist denn z.B. bei diesem Query:
SELECT state.port, state.foo, state.bar FROM state WHERE state = 3
Was soll reader.Read() dann zurück liefern? Das Resultat von port, von foo oder das von bar?


Ich hoffe, es wird klar, was ich meine, denn direkt helfen kann ich leider nicht.

Sephiroth
2011-04-28, 14:21:46
Das ist imho normal. Read gibt immer true oder false zurück. Wenn du an die daten ran willst, dann musst du eine der passenden Methoden (http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqldatareader.html) wie GetString benutzen.

Außerdem immer schön den reader schließen.

Public Sub ReadMyData(myConnString As String)
Dim mySelectQuery As String = "SELECT OrderID, CustomerID FROM Orders"
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
Try
' Always call Read before accessing data.
While myReader.Read()
Console.WriteLine((myReader.GetInt32(0) & ", " & myReader.GetString(1)))
End While
Finally
' always call Close when done reading.
myReader.Close()
' Close the connection when done with it.
myConnection.Close()
End Try
End Sub 'ReadMyData


Ich kenne zwar diese Programmesprache nicht, aber das Problem wird einfach sein, dass du lediglich ausliest, ob ein Ergebnis gefunden wurde oder nicht.
jup (mehr oder weniger)

tsaG
2011-04-28, 14:25:15
Ah, Okay, danke. ich wollte eigentlich den wert von state.port haben. Es ist etwas verwirrend da die Tabelle auch state heist und zusätzlich eine Spalte state besitzt. Ich möcht in der Tabelle state den Wert in port ausgegeben haben undzwar in der zeile wo der wert state = 3 ist. Die Sprache ist vb.net

module state port date
0 2 2
0 3 3 2011-04-28 13:42:53
0 3 4
0 4 2

So sieht die Tabelle aus :)

Zusätzlich habe ich noch ein weiteres kleines Problem ich möchte jedes Element in meinem Array an die funktion Logwriter übergeben, leider bekomme ich das nicht ganz unter vb.net hin.

Dim meineStrings() As String = data.Split(".")
Dim datacoloumn As String

For Each datacoloumn In meineStrings
logwriter(datacoloumn)
Next

Der String data sieht (bspw) so aus:
data= "123.4564.3453.5345364.234.3


EDIT: Okay, danke. Dann werde ich eine andere Methode benutzen!

Matrix316
2011-04-28, 15:15:00
Hm, du könntest doch die Ergebnisse in eine DataTable bzw. DataSet reinschreiben mit dem SqlDataAdapter (myDataAdaper.Fill(DataSet,Tabellenname)). Dann brauchste auch keinen String splitten, sondern einfach direkt for i to dtTable.rows.count-1 blablabla next.

Public Function GetDaten() As DataSet
Dim myDataAdapter As New SqlDataAdapter
Dim mySelectCommand As New SqlCommand
Dim myCon As New SqlConnection(Configuration.ConnectionString)
Dim myDS As New DataSet("Dingens")

Try
myCon.Open()
mySelectCommand.Connection = myCon
myDataAdapter.SelectCommand = mySelectCommand

mySelectCommand.CommandText = "Select * from Dingens where dings und bums"
myDataAdapter.Fill(myDS, "Dingens")
Catch ex As Exception
Debug.WriteLine(ex.Message)
Finally
myCon.Close()
End Try

Return myDS
End Function

tsaG
2011-04-28, 16:20:13
Das String splitten ist wieder eine andere baustelle. Ich bekomme einen 8 byte String herein der dann aufgeteilt und entschlüsselt werden muss. Aber danke für den Tip, der hat mir an einer anderen stelle sehr geholfen :)

Wie war das nochmal mit dem GetString?

Dim reader = myCommand.ExecuteReader
ergebnis = reader.GetString("state")

? :( aber was muss ich denn da in die Klammern von GetString schreiben?

Marscel
2011-04-28, 21:28:52
? :( aber was muss ich denn da in die Klammern von GetString schreiben?

What about the Handbuch? (http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqldatareader.html#connector-net-examples-mysqldatareader-getstring)