как подключиться к базе данных при выборе любого значения в выпадающем списке - PullRequest
1 голос
/ 05 мая 2011

У меня есть выпадающий список, который заполнен различным именем базы данных. Я хочу подключиться к определенной базе данных при выборе любого имени базы данных в выпадающем списке. Gow я должен идти с этим? Код для этого выглядит следующим образом ..

private void Form1_Load(object sender, EventArgs e)   
      {  XmlDocument doc = new XmlDocument();
     doc.Load("C:\\Documents and Settings\\user\\Desktop\\abc.xml");             XmlNodeList List = doc.SelectNodes("config/dataSources/dataSource");    
         foreach (XmlNode dataSources in List)             
{ comboBox1.Items.Add(dataSources.Attributes["name"].Value.ToString());                    comboBox2.Items.Add(dataSources.Attributes["name"].Value.ToString());      
 }   

    } 

У меня есть другой код с информацией о строке подключения

public class DBConnect   
  {        
 string dataSource;    
     string userId;      
   string password;        
 string filepath;          
public DBConnect()       
  {         }     
     public string ConnectionString()  
       {    filepath = ReadRegistry("ConfigFile");     
         XmlDocument doc = new XmlDocument();   
          doc.Load(@filepath);        
      XmlNodeList nodes = doc.SelectNodes
("/config/dataSources/dataSource");        
         foreach (XmlNode node in nodes)  
     {      if (userId.select == node.Attributes["dataSource"].Value)  
               {      dataSource = node.Attributes
["dataSource"].Value;                 
    userId = node.Attributes["userId"].Value;   
        password = node.Attributes["password"].Value;   
        password = Abc.Security.Encryption.Decode(password);
                     break;         

        }       
      }          
   string conn = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Password=" + password + ";User ID=" + userId + ";Data Source=" + dataSource + ";";                 return conn;         }          protected string ReadRegistry(string filename)         {             Microsoft.Win32.RegistryKey theKey = Microsoft.Win32.Registry.LocalMachine;             theKey = theKey.OpenSubKey(@"SOFTWARE\Abc, Inc\Abc Marketing");              if (theKey != null)             {                 //string filePath = theKey.GetValue("ConfigFile").ToString();                 filepath = theKey.GetValue(filename).ToString();                 theKey.Close();           
  }    
          return filepath;  
       } 

Итак, как мне теперь написать код, который при выборе любого имени базы данных в выпадающем списке соединяет меня с этой конкретной базой данных. Я новичок в C #, пожалуйста, предложите мне решение. Где я должен быть в том числе код?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Хорошо, вы можете подключить событие SelectedIndexChanged вашего ComboBox , и при его запуске вы можете получить выбранную базу данных из свойства SelectedItem ComboBox и использовать ее в строке подключения для подключения к ваша база данных.

Пример
Вы сказали, что у вас уже есть рабочая строка подключения. Все, что вам нужно сделать, это разрешить своим пользователям изменять часть DataSource этой строки. Для этого вы можете использовать свойство OracleConnectionStringBuilder.DataSource .

Обновите это свойство в событии SelectedIndexChanged вашего ComboBox:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
    // A connection string for testing.
    string connectString = "Server=OracleDemo;Integrated Security=True"
    var builder = new OracleConnectionStringBuilder(connectString);
    // Show your connection string before any change.
    Console.WriteLine("ConnString before: {0}", builder.ConnectionString);
    builder.DataSource = comboBox1.SelectedItem.ToString();
    // This will show your conn string has been updated with the user selected database name.
    Console.WriteLine("ConnString  after: {0}", builder.ConnectionString);

    // At this point you're ready to use the updated connection string.
}

Вы хотите, чтобы ваш ComboBox использовал значение DropDownStyle.DropDownList, чтобы пользователи не могли вводить собственные имена баз данных.

2 голосов
/ 05 мая 2011

Вы можете сделать

SqlConnectionStringBuilder builder =
            new SqlConnectionStringBuilder("server=(local);user id=ab; password= a!Pass113;initial catalog=AdventureWorks");
builder.InitialCatalog = (string)comboBox1.SelectedItem;

Для Oracle сделать

 OracleConnectionStringBuilder builder =
                new OracleConnectionStringBuilder("");//put connection string here
    builder.UserID = (string)comboBox1.SelectedItem;
    OracleConnection conn = new OracleConnection(builder.ConnectionString);
    OracleCommand cmd = new OracleCommand("Select 1 from dual", conn);
    conn.Open();
    int temp = Convert.ToInt32(cmd.ExecuteScalar());
    conn.Close();

Надеюсь, что эта помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...