2010-11-23 3 views
0

Je dois appeler une fonction sur un événement click bouton comme celui-ciLa fonction en classe distincte ne fonctionne pas

private void btnConnect_Click(object sender, EventArgs e) 
{ 
    string localHost = "192.168.10.3"; 
    string logInDetails = "gp"; 

    //SqlConnection sConnection = new 
    //SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); 
    try 
    { 
     //Checking for the Valid entries in textboxes. 
     if ((txtPassword.Text == logInDetails) && (txtUsername.Text == logInDetails)) 
     //Checking for the appropriate local server address. 
     if (txtHost.Text == localHost) 
     { 
      BindDBDropDown(); 
      SetOperationDropDown(); 
      PrimaryKeyTable(); 
      lblError.Text = "You are connected to the SQL Server...."; 
     } 
     else 
     { 
      lblError.Text = "Invalid Credentials"; 
     } 

     } 
     catch (Exception ex) 
     { 
      //All the exceptions are handled and written in the EventLog. 
      EventLog log = new EventLog("Application"); 
      log.Source = "MFDBAnalyser"; 
      log.WriteEntry(ex.Message); 
     } 
     //finally 
     //{ 
     // //To close the connection 
     // if (sConnection != null) 
     // { 
     //  sConnection.Close(); 
     // } 
     //} 
    } 

la définition de la fonction BindDBDropDown est en classe séparée comme

public class DataAccessMaster 
{ 

    /// <summary> 
    /// This function gets the list of all the databases present in the local server. 
    /// </summary> 
    /// <returns></returns> 
    public static DataSet GetAllDataBaseNames() 
    { 
     SqlConnection sConnection = new 
      SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); 
     //To Open the connection. 
     sConnection.Open(); 

     string selectDatabase = @"SELECT 
             [NAME] 
            FROM  
             [master..sysdatabases]"; 

     SqlCommand sCommand = new SqlCommand(selectDatabase, sConnection); 

     try 
     { 

      DataSet dsListOfDatabases = new DataSet("master..sysdatabases"); 
      SqlDataAdapter da = new SqlDataAdapter(selectDatabase, sConnection); 
      da.TableMappings.Add("Table", "master..sysdatabases"); 
      da.Fill(dsListOfDatabases); 

      DataViewManager dsv = dsListOfDatabases.DefaultViewManager; 
      return dsListOfDatabases; 
     } 
     catch (Exception ex) 
     { 
      EventLog log = new EventLog("Application"); 
      log.Source = "MFDBAnalyser"; 
      log.WriteEntry(ex.Message); 
      return null; 
     } 

     finally 
     { 
      //To close the connection 
     if(sConnection != null) 
      { 
       sConnection.Close(); 
      } 
     } 

et j'ai appelé cette fonction comme ceci

public void BindDBDropDown() 
    { 
     DataSet dsDatabaseList = default(DataSet); 

     try 
     { 
      //The function GetAllDataBaseNames() is called from the DataAccessMaster class. 
      dsDatabaseList = DataAccessMaster.GetAllDataBaseNames(); 

      //Path to the combo box is given to get the value through the GetAllDataBaseNames(). 
      cmbDatabases.DataSource = dsDatabaseList.Tables["master..sysdatabases"]; 
      cmbDatabases.DisplayMember = "NAME"; 
      cmbDatabases.ValueMember = (""); 
     } 

Mais elle ne lie pas la liste requise dans la liste déroulante. Pouvez-vous les gars plz m'aider !!

+0

ne lie pas la liste requise dans la liste déroulante? Quoi d'autre est affiché dans votre liste déroulante alors? Est-ce qu'il lance une exception? Si oui, précisez? – pavanred

+0

Il ne lie rien ... et aucune exception n'est levée – Srivastava

+0

btw, il serait plus propre et plus robuste d'utiliser simplement 'using' plutôt que d'essayer/enfin de fermer les connexions etc. –

Répondre

1

Je devine que le problème est en grande partie ici:

catch (Exception ex) 
    { 
     EventLog log = new EventLog("Application"); 
     log.Source = "MFDBAnalyser"; 
     log.WriteEntry(ex.Message); 
     return null; 
    } 

Si quelque chose va mal, vous avalant (retour null). Vous ne montrez pas ce que le catch est dans BindDBDropDown, mais je suppose qu'il est similaire ...

1

Est-ce que l'ajout de "cmbDatabases.DataBind();" à BindDBDropDown() le réparer? De même, si vous déboguez BindDBDropDown(), la source de données contient-elle des lignes dans la base de données?

1

essayer avec

cmbDatabases.DataSource = dsDatabaseList.Tables["Table"]; 

Ou

cmbDatabases.DataSource = dsDatabaseList.Tables[0];