Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703

    [vb.net] Indice oltre i limiti della matrice. sql

    Strumenti utilizzati:
    visual basic 2008(express edition)
    sql server(express edition)

    Mando in debug e va in errore nel ciclo:
    codice:
    Do While myReader.Read()
                results = results & myReader.GetString(0) & vbTab & _ 
    myReader.GetString(1) & vbLf
    io vorrei semplicemente stampare su una msgbox il risultato della query..l'errore riscontrato è:
    Indice oltre i limiti della matrice.
    qualcuno ha idea di come risolvere??? Non ha senso.. perchè altre istruzioni come l'insert funzionano..

    codice:
    Imports System.Data.SqlClient
    Public Class Form1
        Inherits System.Windows.Forms.Form
        'Create ADO.NET objects.
        Private myConn As SqlConnection
        Private myCmd As SqlCommand
        Private myReader As SqlDataReader
        Private results As String
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            myConn = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Data\DB_FINANCE.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
            myCmd = myConn.CreateCommand
            myCmd.CommandText = "SELECT * FROM PROVA"
    
            'Open the connection.
            myConn.Open()
            myReader = myCmd.ExecuteReader()
            Do While myReader.Read()
                results = results & myReader.GetString(0) & vbTab & _ 
    myReader.GetString(1) & vbLf
    
            Loop
            'Display results.
            MsgBox(results)
            myReader.Close()
            myConn.Close()
    
        End Sub
    End Class

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Il tuo codice non funziona bene.
    Francamente ti consiglio di usare GetValue() al posto di GetString() perchè come fai ad essere sicuro che quelle colonne sono di tipo stringa?

    Con GetValue() non importa quale tipo sia, e restituisce in ogni caso il valore.
    Infatti con GetString() mi da errore, con GetValue() no.

    Esempio:

    codice:
    results = results & myReader.GetValue(0).ToString & vbTab & myReader.GetValue(1).ToString & vbLf


    Il fatto che ti restituisca l'errore
    Indice oltre i limiti della matrice.
    non te lo so spiegare, potrebbe essere dovuto al tipo di dato di quella colonna.

    P.S. Considera anche l'eventualità di valori nulli.


  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    niente da fare...stesso identico errore..
    Indice oltre i limiti della matrice.

    non ha senso..ho seguito esattamente la procedura presente su msdn, cambiando solo il getstring con GetValue...mentre se prima di eseguire il programma con visual basic 2008
    apro il sql server mangment studio poi non riesce nemmeno ad indentificarsi:
    Impossibile aprire il database utente predefinito. Accesso non riuscito. Accesso non riuscito per l'utente 'CIRIO-AHGG5B354\cirio'.
    ma che cavolo sta succedendo?! :master: fortuna che esistono alternative a microsoft...-.-'

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,462
    Originariamente inviato da cleaner
    non ha senso..ho seguito esattamente la procedura presente su msdn, cambiando solo il getstring con GetValue...mentre se prima di eseguire il programma con visual basic 2008
    apro il sql server mangment studio poi non riesce nemmeno ad indentificarsi:
    Posta il codice aggiornato, poiché potrebbe esserci un errore "nascosto".

    Originariamente inviato da cleaner
    ma che cavolo sta succedendo?! :master: fortuna che esistono alternative a microsoft...-.-'
    Se usate impropriamente, anche le alternative a Microsoft vanno in errore, così come gli strumenti Microsoft funzionano egregiamente, se usati come si deve.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    Posta il codice aggiornato, poiché potrebbe esserci un errore "nascosto".
    di seguito:

    Imports System.Data.SqlClient
    Public Class Form1
    Inherits System.Windows.Forms.Form
    'Create ADO.NET objects.
    Private myConn As SqlConnection
    Private myCmd As SqlCommand
    Private myReader As SqlDataReader
    Private results As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    myConn = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Programmi\ Microsoft SQL Server\MSSQL.1\MSSQL\Data\DB_FINANCE.mdf;Integrate d Security=True;Connect Timeout=30;User Instance=True")
    myCmd = myConn.CreateCommand
    myCmd.CommandText = "SELECT * FROM PROVA"

    'Open the connection.
    myConn.Open()
    myReader = myCmd.ExecuteReader()
    Do While myReader.Read()
    results = results & myReader.GetValue(0) & vbTab & _
    myReader.GetValue(1) & vbLf

    Loop
    'Display results.
    MsgBox(results)
    myReader.Close()
    myConn.Close()

    End Sub
    End Class
    noti qualcosa di sbagliato? Di diverso dalla procedura presente su msdn c'è solo il getvalue invece che il getstring... forse può servire sapere che il servizio è avviato in modo manuale prima di eseguire il debug.

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Stai usando una User Instance ?

    Fossi in te ne starei alla larga... Leggi questo:
    User Instance... la fine è vicina!
    http://community.ugiss.org/blogs/lbi...32-vicina.aspx


  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    la stringa che utilizzo, la quale mi era richiesta in questo post(http://forum.html.it/forum/showthrea...readid=1355283) è quella sottostante...

    ok, gibra..quindi mi consigli di non utilizzare l'instanza dell'utente..mi puoi fare allora un esempio commentato di come procedere una volta per tutte??così utilizzo quello come modello base per ogni operazione sql-vb2008.
    Grazie.

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,462
    Originariamente inviato da cleaner
    noti qualcosa di sbagliato? Di diverso dalla procedura presente su msdn c'è solo il getvalue invece che il getstring... forse può servire sapere che il servizio è avviato in modo manuale prima di eseguire il debug.
    Quanti campi vengono restituiti dalla tua istruzione di SELECT?
    In quale riga del codice si verifica esattamente l'errore che hai specificato?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    mm..O_o allora..ho fatto un po di prove e dai test è risultato questo:

    se il servizio è messo in automatico, cioè si autoavvia con windows il codice funziona, mentre se il servizio è avviato manualmente da quell'errore;

    ma perchè si comporta così??

    poi vorrei fare alcune considerazioni... per quanto riguarda la stringa utilizzata mi è stato consigliato di cambiarla ... mi potreste indicare quale utilizzare tra quelle disponibili qua?http://www.connectionstrings.com/sql-server-2005

    infine volevo sapere..ma quale sarebbe il recordset da scorrere?e con quale propietà? di solito io usavo movenext...grazie.

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,462
    Originariamente inviato da cleaner
    se il servizio è messo in automatico, cioè si autoavvia con windows il codice funziona, mentre se il servizio è avviato manualmente da quell'errore;
    Cioè, non hai la possibilità di fare del debugging sul tuo progetto?
    Se la risposta è "no", come puoi dire che l'errore riscontrato si verifichi esattamente nel codice che hai riportato?

    Originariamente inviato da cleaner
    ma perchè si comporta così??
    Veramente, non è nemmeno chiaro cosa succede, alla fine dei conti: non fai debugging, lanci un programma, ottieni un errore e posti un pezzo di codice che potrebbe non essere quello che lo provoca, quindi risulta difficile ora fare delle supposizioni.

    Originariamente inviato da cleaner
    poi vorrei fare alcune considerazioni... per quanto riguarda la stringa utilizzata mi è stato consigliato di cambiarla ... mi potreste indicare quale utilizzare tra quelle disponibili qua?http://www.connectionstrings.com/sql-server-2005
    C'è già un problema da risolvere, che è quello iniziale e rappresentato dal titolo della discussione: sollevarne un altro all'interno della stessa può generare solo un gran casino.

    Originariamente inviato da cleaner
    infine volevo sapere..ma quale sarebbe il recordset da scorrere?e con quale propietà? di solito io usavo movenext...grazie.
    Ma questa cosa non l'hai già fatta con il codice che hai postato?

    Insomma, non si capisce in quale situazione ci troviamo qui... :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.