2011-09-29 3 views
1

windowsform 응용 프로그램을 개발 중입니다. 서버 이름 목록이있는 콤보 박스와 선택된 서버 이름에 대한 데이터베이스 목록 및 선택한 데이터베이스에 대한 테이블 목록에 대한 목록으로 구성됩니다. 사용자가 servername을 선택하고 버튼을 클릭하면 서버에 데이터베이스 이름이 표시됩니다. 사용자가 마음을 바꾸고 또 다른 servername을 선택하면 여전히 동일한 데이터베이스 목록이 선택됩니다.사용자 선택을 변경하면 Combobox에서 항목 지우기

public MainForm() 
    { 
     InitializeComponent(); 
     // FileHelper = new SqlDatabaseDataExport.FileHelper.FileUtilHelper(); 
     dt = SmoApplication.EnumAvailableSqlServers(false); 

     if (dt.Rows.Count > 0) 
     { 
      foreach (DataRow dr in dt.Rows) 
      { 
       ServernamesList_combobox.Items.Add(dr["Name"]); 

      } 
      // ServernamesList_combobox.Items.Add("10.80.104.30\\webx"); 

      DisplayMainWindow("Server list added"); 
      Logger.Log("Server List added"); 
     } 

     Authentication_combobox.Items.Add("Windows Authentication"); 
     Authentication_combobox.Items.Add("Sql Authentication"); 
    } 



    /// <summary> 
    /// Generating list of databases with in the selected Server and list of 
    /// selected tables with in the selected 
    /// databse 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 

    private void DatabasenamesList_combobox_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     dbName = DatabasenamesList_combobox.SelectedItem.ToString(); 


     connectionString = GetConnectionString(); 
     string mySelectQuery = "select [name] from sys.tables WHERE type = 'U' AND is_ms_shipped = 0 ORDER BY [name];"; 
     SqlConnection con = new SqlConnection(connectionString); 
     SqlCommand myCommand = new SqlCommand(mySelectQuery, con); 

     con.Open(); 
     SqlDataReader myReader = myCommand.ExecuteReader(); 
     try 
     { 
      while (myReader.Read()) 
      { 
       SelectTables.Items.Add(myReader.GetString(0)); 
      } 
     } 
     finally 
     { 

      myReader.Close(); 
      con.Close(); 
     } 


    } 



     private void button1_Click_1(object sender, EventArgs e) 
    { 
     serveName = ServernamesList_combobox.SelectedItem.ToString(); 
     if (string.IsNullOrEmpty(serveName)) 
     { 
      MessageBox.Show("Please select servername"); 
      return; 
     } 

     if (Authentication_combobox.SelectedItem == null) 
     { 
      MessageBox.Show("Please select authentication"); 
      return; 
     } 
     String conxString = string.Empty; 

     if (Authentication_combobox.SelectedItem == "Windows Authentication") 
     { 
      conxString = "Data Source=" + serveName + "; Integrated Security=True;"; 
     } 

     if (Authentication_combobox.SelectedItem == "Sql Authentication") 
     { 
      if (string.IsNullOrEmpty(Username.Text)) 
      { 
       MessageBox.Show("Please Enter Valid User name"); 
       return; 
      } 
      if (string.IsNullOrEmpty(Password.Text)) 
      { 
       MessageBox.Show("Please Enter Valid Password"); 
       return; 
      } 
      conxString = "Data Source=" + serveName + "; Integrated Security=False;User ID =" + Username.Text + ";Password=" + Password.Text; 
     } 


     using (SqlConnection sqlConx = new SqlConnection(conxString)) 
     { 

      try 
      { 
       sqlConx.Open(); 
       MessageBox.Show("Connection established successfully"); 

      } 
      catch (Exception ex) 
      { 

       MessageBox.Show("Exception" + ex); 
       MessageBox.Show(" Please enter valid Credentials"); 
       return; 

      } 

      DataTable tblDatabases = sqlConx.GetSchema("Databases"); 
      sqlConx.Close(); 

      foreach (DataRow row in tblDatabases.Rows) 
      { 
       Databases.Add(row["database_name"].ToString()); 
      } 

     foreach (var database in Databases) 
     { 
      DatabasenamesList_combobox.Items.Add(database); 
     } 


    } 

    } 

답변

3

이 DatabasenamesList_combobox에의 SelectedIndexChanged 이벤트를 추가 : 내 데이터베이스 목록 내가이

가 여기 내 예제 코드입니다 achive 수있는 방법을 서버 slection에 변화에 따라마다 갱신해야한다. 해당 메서드의 코드에서 코드를 호출하여 데이터베이스를 채 웁니다. 모든 것이 'button1'에 채워져 있습니다. 같은 일이라고 무언가로 당신의 절차를 이동

 

private void PopulateDatabases(string serverName) 
{ 
     //populate Databases 
     //.. your code here ... 

     //clear the list 
     DatabasenamesList.Items.Clear(); 
     foreach (var database in Databases) 
     { 
      DatabasenamesList_combobox.Items.Add(database); 
     } 

} 
 

같은 당신의 등이 코드를 정리하는 여러 가지 방법이 있습니다 캐치 (예외 예)

가 어떻게 예외가에서 아는가 올바른 인증 유형이 없습니까? 특정 유형의 예외를 catch하고 별도로 처리해야합니다.

관련 문제