Connessione a DB SQL

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Connessione a DB SQL

    DiegoLuppi1993 ha scritto:


    Sisi l'errore è lo stesso non trova il riferimento alla colonna della vista SQL, allego il codice completo per comodità:
    Se scrivi
    
    select CODARTICOLO as CodiceArticolo
    
    il campo si chiamerà CodiceArticolo, ovviamente.

    P.S.: formatta il codice incollato con l'apposito pulsante, altrimenti non ci si capisce nulla.

    Ciao!
  • Re: Connessione a DB SQL

    @DiegoLuppi : nella firma io leggo "IT Junion Manager" forse intendevi Junior e non Junion?
  • Re: Connessione a DB SQL

    Non è li l'errore secondo me perchè il risultato è sempre il medesimo, comunque:
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Data.OleDb;
    
    namespace Esercizio_Windows_Form
    
    {
        public partial class Form2 : Form
            {
                public Form _fr1;
                public Form2()
                {
                    InitializeComponent();
                }
    
            // carico istanza sql, connessione e gestione query 
            private void Form2_Load(object sender, EventArgs e) 
            
            {
                SqlConnection conn = new SqlConnection();
                conn.ConnectionString = @"Data Source=SRV-APP01;Initial Catalog=UFFICIALE;Persist Security Info=True;User ID=sa;Password=password";
    
                SqlCommand command = new SqlCommand();
                command.Connection = conn;
                command.CommandText = "select CODARTICOLO as CodiceArticolo, MG87_DESCART as Descrizione, MG7G_CODLOTTO_MG4G as Lotto, MG7G_SCADENZA as Scadenza, MG7G_UBICAZ_MG97 as Ubicazione, MG7I_QGIACEFF as Qta, MG7G_CODCONFEZ_MG96 as Confezione FROM V_GIACENZE_LOTTI_2021 WHERE MG66_GRUPFIS_MG61 = 'PF' ORDER BY CODARTICOLO";
    
                DataTable data = new DataTable();
    
                SqlDataAdapter adapter = new SqlDataAdapter(command);
    
                adapter.Fill(data);
    
                dataGridView1.DataSource = data;
            }
    
            private void button1_Click_1(object sender, EventArgs e)
            {
                _fr1.Visible = true;
                Hide();
            }
    
            readonly DataTable data = new DataTable();
            
    
            private void button3_Click(object sender, EventArgs e)
            {
                SqlConnection conn = new SqlConnection();
                conn.ConnectionString = @"Data Source=SRV-APP01;Initial Catalog=UFFICIALE;Persist Security Info=True;User ID=sa;Password=password";
    
                SqlCommand command = new SqlCommand();
                command.Connection = conn;
                command.CommandText = "select CODARTICOLO as CodiceArticolo, MG87_DESCART as Descrizione, MG7G_CODLOTTO_MG4G as Lotto, MG7G_SCADENZA as Scadenza, MG7G_UBICAZ_MG97 as Ubicazione, MG7I_QGIACEFF as Qta, MG7G_CODCONFEZ_MG96 as Confezione FROM V_GIACENZE_LOTTI_2021 WHERE MG66_GRUPFIS_MG61 = 'PF' ORDER BY CODARTICOLO";
    
                conn.Open();
    
                SqlDataAdapter adapter = new SqlDataAdapter(command);
    
                adapter.Fill(data);
    
                dataGridView1.DataSource = data;
            }
    
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                DataView dv = data.DefaultView;
                dv.RowFilter = "CodiceArticolo LIKE '" + textBox1.Text + "%'";
                dataGridView1.DataSource = dv;
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
        }
    }
    
  • Re: Connessione a DB SQL

    DiegoLuppi1993 ha scritto:


    Non è li l'errore secondo me perchè il risultato è sempre il medesimo [...]
    Quello è senz'altro un errore. Se poi ve ne sono altri, lo ignoro.

    Ad esempio, non so che tipo di ricerca fai, ma se devi cercare il testo inserito all'interno del codice (non all'inizio o alla fine soltanto), devi usare una espressione LIKE = '%....%', con un simbolo "%" all'inizio e alla fine.

    Se lo metti solo alla fine, allora troverai solo i codici che iniziano con il valore inserito.

    Detto questo, se vuoi verificare il punto in cui è presente un ipotetico problema, devi fare debugging e verificare i dati che recuperi, se ci sono tutti, e come si rapportano con il filtro che hai indicato.

    Senza dati né esempi né altri riferimenti, non è che si possa dire molto.
  • Re: Connessione a DB SQL

    Altro problema. Vedo questo codice nell'evento Form_Load:
    
    DataTable data = new DataTable();
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    adapter.Fill(data);
    dataGridView1.DataSource = data;
    
    Hai dichiarato una variabile locale "data" che rappresenta un DataTable, poi ne hai messa un'altra a livello di Form:
    
    readonly DataTable data = new DataTable();
    
    Una direi che è sufficiente, o comunque sono da codificare allo stesso modo per evitare conflitti, ad esempio riempire la prima e visualizzare la seconda, come penso accada esattamente, infatti nel button3_Click (metti dei nomi significativi!) hai scritto
    
                SqlDataAdapter adapter = new SqlDataAdapter(command);
                adapter.Fill(data);
                dataGridView1.DataSource = data;
    
    quindi stai usando la variabile dichiarata a livello di Form, e non quella locale.

    Anche in questo contesto
    
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                DataView dv = data.DefaultView;
                dv.RowFilter = "CodiceArticolo LIKE '" + textBox1.Text + "%'";
                dataGridView1.DataSource = dv;
            }
    
    stai sempre lavorando con quella definita come campo del Form.

    In poche parole, ne riempi una, ma poi ne usi un'altra e filtri su questa: non vedrai mai nulla a video.

    In conclusione: ripulisci il codice, attribuisci alle variabili e ai controlli (quindi anche agli eventi) dei nomi significativi e fai debug passo passo per verificare eventuali problemi.

    Ciao!
  • Re: Connessione a DB SQL

    Sono arrivato a questo punto e tutto girà come deve, tranne il refresh button:
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Data.OleDb;
    
    namespace Esercizio_Windows_Form
    
    {
        public partial class Form2 : Form
            {
                public Form _fr1;
                public Form2()
                {
                    InitializeComponent();
                }
    
            // carico istanza sql, connessione e gestione query 
            public void Form2_Load(object sender, EventArgs e) 
            
            {
                SqlConnection conn = new SqlConnection();
                conn.ConnectionString = @"Data Source=SRV-APP01;Initial Catalog=UFFICIALE;Persist Security Info=True;User ID=sa;Password=password";
    
                SqlCommand command = new SqlCommand();
                command.Connection = conn;
                command.CommandText = "select CODARTICOLO as CodiceArticolo, MG87_DESCART as Descrizione, MG7G_CODLOTTO_MG4G as Lotto, MG7G_SCADENZA as Scadenza, MG7G_UBICAZ_MG97 as Ubicazione, MG7I_QGIACEFF as Qta, MG7G_CODCONFEZ_MG96 as Confezione FROM V_GIACENZE_LOTTI_2021 WHERE MG66_GRUPFIS_MG61 = 'PF' ORDER BY CODARTICOLO";
    
                SqlDataAdapter adapter = new SqlDataAdapter(command);
    
                adapter.Fill(giacenze);
    
                dataGridView1.DataSource = giacenze;
            }
    
            private void Menù_Click_1(object sender, EventArgs e)
            {
                _fr1.Visible = true;
                Hide();
            }
    
            readonly DataTable giacenze = new DataTable();
    
            public void RefreshButton_Click(object sender, EventArgs e)
            {
               dataGridView1.Refresh();
            }
    
            private void Research_TextChanged(object sender, EventArgs e)
            {
                DataView dv = giacenze.DefaultView;
                dv.RowFilter = "CodiceArticolo LIKE '" + Research.Text + "%'";
                dataGridView1.DataSource = dv;
            }
    
            private void CloseApp_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
        }
    }
    
    Devo solo aggiornare la visualizzazione senza poter fare modifica, ma il refresh button non da alcun cambiamento
  • Re: Connessione a DB SQL

    DiegoLuppi1993 ha scritto:


    Devo solo aggiornare la visualizzazione senza poter fare modifica, ma il refresh button non da alcun cambiamento
    Per forza: hai dato un'occhiata a quello che fa il metodo Refresh() nella documentazione?

    Prima di chiamare un metodo, è necessario verificare a cosa serve, soprattutto se invocandolo non produce l'effetto che ci si aspetta.

    Nel caso in esame, tra l'altro, non avrebbe funzionato nemmeno se quel metodo fosse preposto a un aggiornamento dei dati, in quanto questi vengono scaricati in una DataTable dopo aver eseguito la query, quindi di fatto la tabella rappresenta una cache dei dati ottenuti tramite il Fill() del DataAdapter senza però avere più nulla a che fare con la query originale che li ha prodotti.

    La tabella riceve i dati e a quel punto la connessione si può chiudere... si potrebbe addirittura eliminare il database, per estremizzare, che la tabella non ne risentirebbe, in quanto lavora in "modalità disconnessa" (si chiama modello "briefcase").

    Banalmente, sposta la logica di caricamento dei dati dal Form_Load in un metodo a parte, e invocalo sia nel Form_Load che nel RefreshButton_Click.

    Ciao!
  • Re: Connessione a DB SQL

    Avevo capito la modifica grazie, ma facendo così (nel refresh button) la lista aggiornata me la mette in coda invece di aggiornare le righe...mi sto perdendo in una stupidata
  • Re: Connessione a DB SQL

    DiegoLuppi1993 ha scritto:


    Avevo capito la modifica grazie, ma facendo così (nel refresh button) la lista aggiornata me la mette in coda invece di aggiornare le righe...mi sto perdendo in una stupidata
    Se rimangono i dati precedenti, o crei una nuova DataTable in modo che parta vuota/azzerata, oppure elimini i dati all'interno di quella esistente chiamando il metodo prima di caricarci i dati (quindi prima del Fill()).
Devi accedere o registrarti per scrivere nel forum
23 risposte