2016-08-22 7 views
-2

Essayer de remplir Combobox avec les données d'une base de données et j'utilise ExecuteReader comme ci-dessous, mais lorsque je tente d'instancier ma connexion il me montre l'erreurImpossible implicitement erreur de type de conversion

Impossible de convertir implicitement erreur de type

Mon DBConnect code de classe:

public class DBConnect 
{ 
     private SqlConnection connection; 
     private string servername = "10.1.76.109,1433"; 
     private string database = "EngLib"; 
     private string dbuser; 
     private string userpassword; 


     public DBConnect() 
     { 

     } 

     public void doDBConnect(string dbuserform, string userpasswordform) 
     { 
      dbuser = dbuserform; 
      userpassword = userpasswordform; 
     } 


     public void Initialize() 
     { 

     } 

     public bool openConnection() 
     { 
      string connectionString; 
      connectionString = "Server=" + servername + ";Database=" + database + ";user id=" + dbuser + ";Password=" + userpassword; 
      Console.WriteLine(connectionString); 
      connection = new SqlConnection(connectionString); 
      try 
      { 
       connection.Open(); 
       return true; 
      } 
      catch (SqlException ex) 
      { 
       switch (ex.Number) 
       { 
        case 0: 
         MessageBox.Show("Não é possível contactar o servidor. Entre em contato com o administrador"); 
         break; 

        case 18456: 
         MessageBox.Show("Usuário/Senha inválidos, tente novamente"); 
         break; 
       } 
       return false; 
      } 

} 

Ma forme de code:

{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public void Form2_Load(object sender, EventArgs e) 
    { 
     SqlDataReader rdr = null; 
     DBConnect sqlConnection; 
     sqlConnection = new DBConnect(); 
     sqlConnection.doDBConnect(dbuserform: "usertest", userpasswordform: "usertest"); 
     { 
      try 
      { 

       { 
        sqlConnection.openConnection(); 
        SqlCommand sqlCmd; 
        sqlCmd = new SqlCommand("SELECT Material FROM EngLib"); 
        sqlCmd.Connection = sqlConnection; 
        SqlDataReader sqlReader = sqlCmd.ExecuteReader(); 

        while (sqlReader.Read()) 
        { 
         comboBox1.Items.Add(sqlReader["Material"].ToString()); 
        } 

        sqlReader.Close(); 
       } 
      } 
      finally 
      { 
       // close the reader 
       if (rdr != null) 
       { 
        rdr.Close(); 
       } 
      } 
     } 
    } 
} 

L'utilisateur et le mot de passe dans le code sont temporaires.

+0

Pourriez-vous s'il vous plaît supprimer le code non pertinent? Veuillez indiquer la ligne qui affiche l'erreur et inclure uniquement les extraits associés. Merci –

+0

Hors du thème - vous devez TOUJOURS fermer/disposer de vos connexions à la base de données – MikkaRin

+0

Avez-vous vraiment besoin de cette classe qui ne pose que des problèmes que vous n'auriez pas si vous créiez la connexion là où vous l'utilisiez, mieux en utilisant l'instruction 'using'-? D'autres choses parlent contre l'utilisation d'une classe DB. http://stackoverflow.com/a/9707060/284240 –

Répondre

1

Je pense que le problème est ici:

DBConnect sqlConnection; 
SqlCommand sqlCmd; 
sqlCmd.Connection = sqlConnection; 

SqlCommand attend à ce que Connection est de type SqlConnection, mais vous assignez votre propre classe DBConnect.

solutions possibles:

exposer la propriété connection sur DBConnect et l'utiliser.

Hérite DBConnect de SqlConnection.

Utilisez directement SqlConnection.

Une note supplémentaire: vous ne disposez pas du SqlConnection dans votre classe DBConnect, ce qui peut conduire à StackOverflowException. Vous devez implémenter IDisposable.

+0

Merci beaucoup, c'était le problème et maintenant il est résolu. –

+0

Content de vous aider! S'il vous plaît accepter la réponse si c'était le problème. –