Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    186

    [C#] Problemi accesso DB SQLServer

    Buongiorno, vi scrivo perch� ho un problemino che mi tartassa da un paio di giorni!
    Utilizzo praticamente sempre VB.NET, ma ora sto iniziando col C#, quindi ancora non sono un esperto, per questo vi chiedo di portare pazienza ahaha!

    Per esercitarmi sto ricreando tutte le funzioni che avevo in VB.NET e questo � quello che faccio:

    - Creo il database su SQL Server
    - Creo una tabella
    - Creo delle Stored Procedure
    - Popolo la tabella.

    Il problema che mi sorge � che spesso (non sempre, ed � questo che mi fa impazzire) nel momento in cui apro la connessione per creare la prima stored procedure, non mi fa accedere al database.

    Questa � l'eccezione: Impossibile aprire il database "Database" richiesto dall'account di accesso. Accesso non riuscito.Accesso non riuscito per l'utente 'sa'.

    queste le sub con cui faccio l'apertura

    public void ApriConnessioneSQL()
    {
    myConnection = new SqlConnection("user id=sa; password=password; server=" + nomeServer + "; Connection timeout = 5; database=" + nomeDB);
    myCommand = new SqlCommand(myString, myConnection);
    myConnection.Open();
    }


    public void ChiudiConnessioneSQL()
    {
    myConnection.Close();
    }


    nomeServer e appDataSQL sono due variabili non vuote (le assegno all'apertura del programma e non le resetto pi�)


    Qui la stored Procedure (ne ho 4 da creare e ognuna di queste mi da lo stesso errore se messa per prima)

    public void creaProcedureSelect(String nomeProc)
    {
    myString = "CREATE PROCEDURE " + nomeProc +
    " @campi varchar(max), @tabella varchar(100), @parametro varchar(max)" +
    "AS " + "BEGIN " + "SET NOCOUNT ON; " + "DECLARE @sql varchar(max) " +
    "SET @sql = ' SELECT ' + @campi + ' FROM ' + @tabella + ' WHERE ' + @parametro + ';' " +
    "exec (@sql) " + "END ";


    try
    {
    ApriConnessioneSQL();
    myCommand.ExecuteNonQuery();
    ChiudiConnessioneSQL();
    }
    catch (SqlException ex)
    {
    MessageBox.Show(ex.ToString());
    }


    }


    Creazione del Database e della tabella funzionano sempre correttamente.
    Invece l'apertura della connessione dalla prima store procedure funziona 1 volta ogni 4 circa.

    Qualcuno ha qualche idea?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    186
    *** AGGIORNAMENTO ***

    Il problema non sta nel fatto di creare una stored procedure, ma proprio nell'apertura della connessione, perchè ho provato a far eseguire una semplice Select subito dopo aver creato la tabella e l'errore è lo stesso

    Per essere più chiaro questa è la funzione per la tabella:

    private void createTBSQL(string nomeDB, string nomeTabella, string parametri)
    {
    SqlConnection conn = new SqlConnection("SERVER=" + nomeServer + ";UID=sa;PWD=davide;Initial Catalog=" + nomeDB + ";Pooling=False");
    string sqlString = "CREATE TABLE " + nomeTabella + "(" + parametri + ")";
    SqlCommand cmd;
    cmd = new SqlCommand(sqlString, conn);


    try{cmd.Connection.Open();}
    catch{MessageBox.Show(" Impossibile accedere al server", "ERROR", MessageBoxButtons.OK);}

    try{cmd.ExecuteNonQuery();}
    catch{MessageBox.Show(" Tabella già esistente", "ERROR", MessageBoxButtons.OK);}
    cmd.Connection.Close();
    }

  3. #3

  4. #4
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    186
    Il problema � che a volte funziona!
    E comunque con la stessa stringa di connessione se anzich� fare la SELECT (o qualsiasi altra istruzione) subito dopo la creazione della tabella, la faccio eseguire tramite click di un button, allora funziona correttamente.

    Oltretutto ora, con la stringa di connessione che gi� avevo, ha iniziato a funzionare e non ho cambiato nulla...
    Per� vorrei capire il problema

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Io modificherei il codice per renderlo più strutturato, poiché sospetto che vi siano aperture/chiusure di connessioni inattese a seconda del "giro" che fa il codice.

    Io adotterei una struttura di questo tipo:

    codice:
    using (var connection = new SqlConnection(connectionString))
    {
      connection.Open();
      using (var command = new SqlCommand(commandText, connection))
      {
        // ...
      }
    }
    In questo modo, le risorse vengono inizializzate/finalizzate nella sequenza ritenuta consona ed è possibile riprodurle senza che l'eventuale intervento del GC possa influire.

    Poi ne riparliamo.

    Ciao!
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.