2013-07-25 2 views
2

Je suis nouveau en C# et j'ai commencé à étudier hier.C# - Connexion publique globale à SQL Server 2005

J'ai créé la classe pour se connecter à SQL Server:

namespace Exchange_Ofiice.Classes 
{ 
    public class sqlConn 
    { 
     public void connectionMethod() 
     { 
      SqlConnection myConnection = new SqlConnection("user id=ID;password=PASS;server=SERVER;database=DB;"); 
      try 
      { 
       myConnection.Open(); 
      } 
      catch 
      { 
       MessageBox.Show("Невозможно подключиться к Базе данных. Пожалуйста обратитесь к программистам!", "Ошибка подключения к Базе данных", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      finally 
      { 
       myConnection.Close(); 
      }   
     } 
    } 
} 

et une autre classe pour l'authentification utilisateur:

namespace Exchange_Ofiice.Classes 
{ 
    public class auth:sqlConn 
    { 

     public void authMethod() 
     { 
      SqlCommand myCommand = new SqlCommand("Command String", myConnection);       
     } 

    } 
} 

Comment obtenir (utilisation) résultat de la connexion SQL (myConnection) dans la deuxième classe ?

P.S. La ligne SqlCommand myCommand = new SqlCommand("Command String", myConnection); ne fonctionne pas.

P.S.S. Désolé, si j'ai une erreur, mon anglais n'est pas parfait.

+1

Il est préférable de partager la connexion * chaîne * autour de l'application, mais ne le faites pas avec la connexion. Partout où vous avez besoin d'une connexion, vous devez en créer une nouvelle, 'l'ouvrir ', l'utiliser pour le travail en cours, et le' Fermer '(ou, de manière équivalente, l'avoir dans un bloc' using'). N'essayez pas de partager des objets de connexion. –

+0

@Damien_The_Unbeliever ok – Abdukhafiz

Répondre

1

Essayez ceci. Vous avez donc la SQLConnection dans la classe et non dans la fonction. Si vous déclarez quelque chose dans une fonction, il ne sera accessible que dans cette fonction.

public class sqlConn 
{ 
    public SqlConnection myConnection; 
    public void connectionMethod() 
    { 
     myConnection = new SqlConnection("user id=ID;password=PASS;server=SERVER;database=DB;"); 
     try 
     { 
      myConnection.Open(); 
     } 
     catch 
     { 
      MessageBox.Show("Невозможно подключиться к Базе данных. Пожалуйста обратитесь к программистам!", "Ошибка подключения к Базе данных", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally 
     { 
      myConnection.Close(); 
     } 
    } 
} 

Oh vous voudrez peut-être envisager de faire la SQLConnection privée

private SqlConnection myConnection; 

Et puis faire une fonction pour récupérer la valeur.

public SqlConnection GetConnection() 
    { 
     return myConnection; 
    } 

Et dans l'autre classe, il sera:

SqlCommand myCommand = new SqlCommand("Command String", GetConnection()); 
1

Tout d'abord, la connexion doit être champ public de votre classe, ne fonctionne pas variable. Et d'autre part, vous fermez enfin votre connexion, vous n'avez donc aucune chance de le faire fonctionner plus tard.

public class sqlConn 
{ 
     public SqlConnection myConnection = new SqlConnection("user id=ID;password=PASS;server=SERVER;database=DB;"); 

     public void connectionMethod() 
     {   
      try 
      { 
       myConnection.Open(); 
      } 
      catch 
      { 
       //Here goes error handling... 
      }     
    } 
} 

Et, sûrement, dans votre méthodeAuth vous devez effectuer des vérifications pour l'état de connexion, afin d'éviter des exceptions, si la connexion n'a pas été initialisé.

Aussi, comme une bonne pratique, assurez-vous implémentez interface IDisposable (http://msdn.microsoft.com/en-us/library/system.idisposable.aspx) pour votre classe de connexion, sinon vous pourriez avoir des ennuis plus tard.

+0

Merci. J'ai compris mon erreur. – Abdukhafiz