Der Index lag außerhalb des Bereichs.

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von WhitePage.

    Der Index lag außerhalb des Bereichs.

    Schönen Guten Tag. Ich hab folgendes Problem. Ich bin gerade dabei etwas mit Datenbanken herrumzuspielen und krieg dabei ne komische Fehlermeldung:

    der index lag außerhalb des bereichs. er muss nicht negativ und kleiner als die auflistung sein. Parametername: index

    Ich hab mich dumm und dämlich gesucht und kann nichts finden. Hier mal die Code Zeilen:

    Quellcode

    1. Dim con As New MySqlConnection
    2. Dim cmd As New MySqlCommand
    3. Dim reader As MySqlDataReader
    4. Try
    5. con.ConnectionString = "Server=localhost;Database=XXX;Uid=root;"
    6. cmd.Connection = con
    7. con.Open()
    8. cmd.CommandText = "BlaBlaBla"
    9. cmd.ExecuteNonQuery()
    10. con.Close()
    11. Catch ex As Exception
    12. MsgBox(ex.Message)
    13. End Try
    14. Me.Hide()
    15. Neue_Mitarbeitwer_Daten.Show() 'Hier kommt die Fehlermeldung


    Quellcode

    1. Private Sub Neue_Mitarbeitwer_Daten_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim con As New MySqlConnection
    3. Dim cmd As New MySqlCommand
    4. Dim reader As MySqlDataReader
    5. x = 0
    6. Try
    7. con.ConnectionString = "Server=localhost;Database=XXX;Uid=root;"
    8. cmd.Connection = con
    9. con.Open()
    10. cmd.CommandText = "SELECT * FROM XX "
    11. reader = cmd.ExecuteReader()
    12. Do While reader.Read()
    13. Mitarbeiter.Add(reader("Name"))
    14. Loop
    15. con.Close()
    16. Catch ex As Exception
    17. MsgBox(ex.Message)
    18. End Try
    19. End Sub


    Die Fehlermeldung erscheint sobald ich das Zweite Formular öffne mit: Neue_Mitarbeitwer_Daten.Show()

    Kann mir irgendwer dabei helfen?
    In Zeile 15 schreibst du "Mitarbeiter.Add(reader("Name"))", 2 Fragen dazu:
    1.) Was ist diese "Mitarbeiter"? Eine Collection? Ein Array? Eine List(e)?
    2.) Wo hast du das definiert? (Ok klärt sich mit der 1. Frage, kann abe auch sein dass du des iwo anderss global definiert hast)

    Mfg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Hier sind meine Deklarationen
    Dim con As New OleDBConnection
    Dim cmd As New OleDBCommand
    Dim reader As OleDBDataReader
    Dim Kategorien As New List(Of String)
    Dim Mitarbeiter As New List(Of String)
    Dim UnterKategorien As New List(Of String)
    Dim KID As New List(Of String)
    Dim Labels As New List(Of Label)
    Dim Texts As New List(Of TextBox)
    Dim x As Integer


    Also Mitarbeiter ist eine List(of)

    *Edit Achja. Die DatenBank wurde auf einen MSSQL Server verschoben. Trozdem gleicher Fehler
    Dann setz mal bei der ersten Aktion, die du in ​Neue_Mitarbeitwer_Daten machst einen Breakpoint und geh dann Step by Step durch. Dann sag mal, in welcher Zeile genau der Fehler auftritt. (muss ja in ​Neue_Mitarbeitwer_Daten_Load sein.)
    Mfg
    Vincent

    Soweit ich weiß, wirft er im "Form_Load" keine Ausnahmen, im "Form_Shown" allerdings schon.
    Kopier deinen Code mal ins "Form_Shown"-Event und guck, ob du da eventuell mehr gesagt bekommst.

    Und ich glaube, du hast Option Strict Off, sonst würde er bei der Zeile schon meckern, wenn du sie geschrieben hast:

    VB.NET-Quellcode

    1. Mitarbeiter.Add(reader("Name"))
    da reader Object ist und mit

    VB.NET-Quellcode

    1. Mitarbeiter.Add(reader("Name").tostring)
    ersetzt werden sollte, damit auch ein String an die Liste übergeben wird ...
    Your computer is running... You better go chase it! :P :D
    Danke Noyne für deine Antwort.
    Leider auch das hat nichts gebracht.
    Das Problem hierbei ist ja das es keinen wirklichen Fehler im Programm gibt. Es kommt zwar die Fehlermeldung aber ansnsten bemerke ich keinerlei Schäden. Nur das Blöde ist, das die Fehlermeldung weg muss.

    Hat sonst vieleicht noch einer eine Idee?

    Cryol schrieb:

    Das Debuggen bricht nicht ab

    Cryol schrieb:

    Leider auch das hat nichts gebracht.
    Setz den Haltepunkt in die Form_Load dieser Form und steppe sie durch.
    Bei welchem Befehl wird die Prozedur verlassen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Cryol schrieb:

    erreicht wird
    In welcher Prozedur hast Du in welcher Zeile den Haltepunkt?
    Bitte etwas mehr Eigeninitiative. Lass Dir nicht jede Information aus der Nase ziehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hier hab die Haaltemarke gesetzt

    Quellcode

    1. Private Sub Neue_Mitarbeitwer_Daten_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown


    Die Fehlermeldung kam aber schon vorher:

    Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim con As New OleDBConnection
    3. Dim cmd As New OleDBCommand
    4. Try
    5. con.ConnectionString = "Provider=SQLOLEDB;Data Source=BOR-PW01;Initial Catalog=skills;Integrated Security=SSPI;"
    6. cmd.Connection = con
    7. con.Open()
    8. cmd.CommandText = "CREATE TABLE " & TextBox1.Text & TextBox2.Text & " ( ID int NOT NULL,Kategorie varchar(50) NOT NULL,UnterKategorie varchar(50) NOT NULL,Einstufung int NOT NULL, PRIMARY KEY(ID));"
    9. cmd.ExecuteNonQuery()
    10. Klasse.Nachname = TextBox2.Text
    11. Klasse.VorName = TextBox1.Text
    12. con.Close()
    13. Catch ex As Exception
    14. MsgBox(ex.Message)
    15. End Try
    16. Me.Hide()
    17. Neue_Mitarbeitwer_Daten.Show() '[b]Genau hier kommt die Fehlermeldung[/b]
    18. 'End Try
    19. End Sub

    Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim con As New OleDBConnection
    3. Dim cmd As New OleDBCommand
    4. con.ConnectionString = "Provider=SQLOLEDB;Data Source=BOR-PW01;Initial Catalog=skills;Integrated Security=SSPI;"
    5. cmd.Connection = con
    6. con.Open()
    7. cmd.CommandText = "CREATE TABLE " & TextBox1.Text & TextBox2.Text & " ( ID int NOT NULL,Kategorie varchar(50) NOT NULL,UnterKategorie varchar(50) NOT NULL,Einstufung int NOT NULL, PRIMARY KEY(ID));"
    8. cmd.ExecuteNonQuery()
    9. Klasse.Nachname = TextBox2.Text
    10. Klasse.VorName = TextBox1.Text
    11. con.Close()
    12. Me.Hide()
    13. Neue_Mitarbeitwer_Daten.Show()
    14. End Sub


    und

    Quellcode

    1. Dim con As New OleDbConnection
    2. Dim cmd As New OleDbCommand
    3. Dim reader As OleDbDataReader
    4. x = 0
    5. con.ConnectionString = "Provider=SQLOLEDB;Data Source=BOR-PW01;Initial Catalog=skills;Integrated Security=SSPI;"
    6. cmd.Connection = con
    7. con.Open()
    8. cmd.CommandText = "SELECT * FROM Mitarbeiter "
    9. reader = cmd.ExecuteReader()
    10. Do While reader.Read()
    11. Mitarbeiter.Add(reader("Name").ToString)
    12. Loop
    13. con.Close()
    14. End Sub



    Da sind keine TryCatch mehr. Trozdem kommt eine MessageBox

    Cryol schrieb:

    VB.NET-Quellcode

    1. Neue_Mitarbeitwer_Daten.Show()
    Wo wird dieser Dialog instanziiert?
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Quellcode

    1. Imports System.Data.OleDb
    2. Public Class Neue_Mitarbeiter
    3. Public Klasse As New Class1
    4. Private WithEvents frm2 As Neue_Mitarbeitwer_Daten
    5. Private Sub Neue_Mitarbeiter_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    6. Main.Show()
    7. End Sub
    8. Private Sub Neue_Mitarbeiter_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. End Sub
    10. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    11. frm2 = New Neue_Mitarbeitwer_Daten
    12. Dim con As New OleDBConnection
    13. Dim cmd As New OleDBCommand
    14. con.ConnectionString = "Provider=SQLOLEDB;Data Source=BOR-PW01;Initial Catalog=skills;Integrated Security=SSPI;"
    15. cmd.Connection = con
    16. con.Open()
    17. cmd.CommandText = "CREATE TABLE " & TextBox1.Text & TextBox2.Text & " ( ID int NOT NULL,Kategorie varchar(50) NOT NULL,UnterKategorie varchar(50) NOT NULL,Einstufung int NOT NULL, PRIMARY KEY(ID));"
    18. cmd.ExecuteNonQuery()
    19. Klasse.Nachname = TextBox2.Text
    20. Klasse.VorName = TextBox1.Text
    21. con.Close()
    22. Me.Hide()
    23. frm2.Show(Me)
    24. End Sub
    25. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    26. Me.Hide()
    27. Main.Show()
    28. End Sub
    29. End Class


    So wie es in deiner Anleitung beschrieben wurde :)

    Nur immernoch eine MSGbox