none
Poder conectarme con diferentes bases de datos RRS feed

  • Pregunta

  • Hola soy bastante novata en esto pero estoy realizando una aplicacion Windows Forms en C# con mysql, y tengo todos los accesos a la Base de datos con MySqlConnection, pero ahora quisiera cambiarlos para que se pudiese conectar con bases de datos mysql, sqlserver, ...

    Mi pregunta es. ¿En que archivo puedo crear la conexion a la base de datos para poder cambiarlo en un solo sitio?, ya que hasta ahora lo hacia en cada archivo que necesitaba. ¿Y que comandos utilizo para que sea comun a cualquier base de datos?

    Un saludo y gracias.

    martes, 11 de enero de 2011 15:36

Respuestas

  • hola

    si al idea es usar ado.net podriasaplicar algo como esto

    DbProviderFactories (ADO.NET)

    Escritura de c ó digo independiente del proveedor en ADO.NET

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta MMARIN martes, 11 de enero de 2011 21:19
    • Marcado como respuesta nuka_27 jueves, 3 de febrero de 2011 10:39
    martes, 11 de enero de 2011 20:59
  • :-)
    Hola Nuka,

    En caso que desees usar distintas BD puedes hacer lo siguiente:

    Particularmente, te recomiendo el segundo,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    • Marcado como respuesta nuka_27 jueves, 3 de febrero de 2011 10:40
    viernes, 14 de enero de 2011 9:11
    Moderador
  • cuando agrega una conexion a una base de datos en el proyecto por el server explorer del visual estudio este automaticamente te genera una cadena de conexion en el archivo de configuracion(App.config) que se encuentra dentro del proyecto o dentro del archivo Setting.setting que se encuentra dentro de la carpeta Properties de proyecto

    Utiliza las api de configuracion para leer cada una de las cadena de conexion disponible y exponerlo mediante un control, utiliza este codigo analizalo y adaptalo a tu necesidad. Cuando establesca la conexion con la base de datos hazlo con el valor selecionado del combox.

    C#

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Configuration;
    
    namespace Windows
    {
      public partial class Form8 : Form
      {
        public Form8()
        {
          InitializeComponent();
    
          this.comboBox1.DataSource = NewMethod();
          this.comboBox1.DisplayMember = "key";
          this.comboBox1.ValueMember = "value";
        }
    
    
        // Get the application configuration file.
        private BindingSource NewMethod()
        {
          //try
          //{
            System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    
            BindingSource bs = new BindingSource();        
    
            Dictionary<string, string> dic = new Dictionary<string, string>();
    
            ConnectionStringSettings connString;
            if (config.ConnectionStrings.ConnectionStrings.Count > 0)
            {
              for (int i = 0; i <= config.ConnectionStrings.ConnectionStrings.Count - 1; i++)
              {
                connString = config.ConnectionStrings.ConnectionStrings[i];
                if (connString != null)
                {
                  dic.Add(connString.Name, connString.ConnectionString);
    
                }
                else
                {
                  label1.Text += "No connection string";
                }
              }
            }
            bs.CurrentItemChanged += new EventHandler(bs_CurrentChanged);
            bs.DataSource = dic;
            return bs;
          //}
          //catch (Exception error)
          //{
    
          //  label1.Text = error.Message;
          //}
    
        }
    
        private void bs_CurrentChanged(object sender, EventArgs e)
        {
          BindingSource bs2 = (BindingSource)sender;
    
          label1.Text = bs2.Current.ToString();
        }
      }
    }
    

    VB

    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Linq
    Imports System.Text
    Imports System.Windows.Forms
    Imports System.Configuration
    
    Namespace Windows
    	Public Partial Class Form8
    		Inherits Form
    		Public Sub New()
    			InitializeComponent()
    
    			Me.comboBox1.DataSource = NewMethod()
    			Me.comboBox1.DisplayMember = "key"
    			Me.comboBox1.ValueMember = "value"
    		End Sub
    
    
    		' Get the application configuration file.
    		Private Function NewMethod() As BindingSource
    			'try
    			'{
    			Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
    
    			Dim bs As New BindingSource()
    
    			Dim dic As New Dictionary(Of String, String)()
    
    			Dim connString As ConnectionStringSettings
    			If config.ConnectionStrings.ConnectionStrings.Count > 0 Then
    				For i As Integer = 0 To config.ConnectionStrings.ConnectionStrings.Count - 1
    					connString = config.ConnectionStrings.ConnectionStrings(i)
    					If connString IsNot Nothing Then
    
    						dic.Add(connString.Name, connString.ConnectionString)
    					Else
    						label1.Text += "No connection string"
    					End If
    				Next
    			End If
    			AddHandler bs.CurrentItemChanged, New EventHandler(AddressOf bs_CurrentChanged)
    			bs.DataSource = dic
    			Return bs
    			'}
    			'catch (Exception error)
    			'{
    
    			'  label1.Text = error.Message;
    			'}
    
    		End Function
    
    		Private Sub bs_CurrentChanged(sender As Object, e As EventArgs)
    			Dim bs2 As BindingSource = DirectCast(sender, BindingSource)
    
    			label1.Text = bs2.Current.ToString()
    		End Sub
    	End Class
    End Namespace

    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    • Marcado como respuesta nuka_27 jueves, 3 de febrero de 2011 10:40
    sábado, 15 de enero de 2011 18:56

Todas las respuestas

  • hola, para cualquier base de datos podrias usar entity framerwork , o podrias usar system.data.common , con eset ultimo solo debes cambiar la cadena de conexion y el mismo digamos q hace una converison y al final resultas usando el proveedor especifico, es decir si te conectas a sql usarias sqlclient, a mysql, mysqlclient (claro si usas este conector)...

    Julio Avellaneda
    Blog !!

    martes, 11 de enero de 2011 19:20
  • hola

    si al idea es usar ado.net podriasaplicar algo como esto

    DbProviderFactories (ADO.NET)

    Escritura de c ó digo independiente del proveedor en ADO.NET

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta MMARIN martes, 11 de enero de 2011 21:19
    • Marcado como respuesta nuka_27 jueves, 3 de febrero de 2011 10:39
    martes, 11 de enero de 2011 20:59
  • :-)
    Hola Nuka,

    En caso que desees usar distintas BD puedes hacer lo siguiente:

    Particularmente, te recomiendo el segundo,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    • Marcado como respuesta nuka_27 jueves, 3 de febrero de 2011 10:40
    viernes, 14 de enero de 2011 9:11
    Moderador
  • cuando agrega una conexion a una base de datos en el proyecto por el server explorer del visual estudio este automaticamente te genera una cadena de conexion en el archivo de configuracion(App.config) que se encuentra dentro del proyecto o dentro del archivo Setting.setting que se encuentra dentro de la carpeta Properties de proyecto

    Utiliza las api de configuracion para leer cada una de las cadena de conexion disponible y exponerlo mediante un control, utiliza este codigo analizalo y adaptalo a tu necesidad. Cuando establesca la conexion con la base de datos hazlo con el valor selecionado del combox.

    C#

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Configuration;
    
    namespace Windows
    {
      public partial class Form8 : Form
      {
        public Form8()
        {
          InitializeComponent();
    
          this.comboBox1.DataSource = NewMethod();
          this.comboBox1.DisplayMember = "key";
          this.comboBox1.ValueMember = "value";
        }
    
    
        // Get the application configuration file.
        private BindingSource NewMethod()
        {
          //try
          //{
            System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    
            BindingSource bs = new BindingSource();        
    
            Dictionary<string, string> dic = new Dictionary<string, string>();
    
            ConnectionStringSettings connString;
            if (config.ConnectionStrings.ConnectionStrings.Count > 0)
            {
              for (int i = 0; i <= config.ConnectionStrings.ConnectionStrings.Count - 1; i++)
              {
                connString = config.ConnectionStrings.ConnectionStrings[i];
                if (connString != null)
                {
                  dic.Add(connString.Name, connString.ConnectionString);
    
                }
                else
                {
                  label1.Text += "No connection string";
                }
              }
            }
            bs.CurrentItemChanged += new EventHandler(bs_CurrentChanged);
            bs.DataSource = dic;
            return bs;
          //}
          //catch (Exception error)
          //{
    
          //  label1.Text = error.Message;
          //}
    
        }
    
        private void bs_CurrentChanged(object sender, EventArgs e)
        {
          BindingSource bs2 = (BindingSource)sender;
    
          label1.Text = bs2.Current.ToString();
        }
      }
    }
    

    VB

    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Linq
    Imports System.Text
    Imports System.Windows.Forms
    Imports System.Configuration
    
    Namespace Windows
    	Public Partial Class Form8
    		Inherits Form
    		Public Sub New()
    			InitializeComponent()
    
    			Me.comboBox1.DataSource = NewMethod()
    			Me.comboBox1.DisplayMember = "key"
    			Me.comboBox1.ValueMember = "value"
    		End Sub
    
    
    		' Get the application configuration file.
    		Private Function NewMethod() As BindingSource
    			'try
    			'{
    			Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
    
    			Dim bs As New BindingSource()
    
    			Dim dic As New Dictionary(Of String, String)()
    
    			Dim connString As ConnectionStringSettings
    			If config.ConnectionStrings.ConnectionStrings.Count > 0 Then
    				For i As Integer = 0 To config.ConnectionStrings.ConnectionStrings.Count - 1
    					connString = config.ConnectionStrings.ConnectionStrings(i)
    					If connString IsNot Nothing Then
    
    						dic.Add(connString.Name, connString.ConnectionString)
    					Else
    						label1.Text += "No connection string"
    					End If
    				Next
    			End If
    			AddHandler bs.CurrentItemChanged, New EventHandler(AddressOf bs_CurrentChanged)
    			bs.DataSource = dic
    			Return bs
    			'}
    			'catch (Exception error)
    			'{
    
    			'  label1.Text = error.Message;
    			'}
    
    		End Function
    
    		Private Sub bs_CurrentChanged(sender As Object, e As EventArgs)
    			Dim bs2 As BindingSource = DirectCast(sender, BindingSource)
    
    			label1.Text = bs2.Current.ToString()
    		End Sub
    	End Class
    End Namespace

    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    • Marcado como respuesta nuka_27 jueves, 3 de febrero de 2011 10:40
    sábado, 15 de enero de 2011 18:56
  • Hola

    Ante todo gracias, gracias, ...

    Al final lo he hecho mediante las factorias de código, y para insertar en la bd me va genial, mi problema ahora es para sacar informacion del bd, antes utilizaba el MySqlDataAdapter, pero ahora DbDataAdapter es abstracta, y lo mismo pasa con DbCommandBuilder. ¿ Que podría utilizar si el origen de datos sigue pudiendo ser cualquiera?

                DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);
                DbConnection c = factory.CreateConnection();

                c.ConnectionString = connection;


                try
                {
                    c.Open();
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }

                string queryString = "Select nombre, primerApellido, segundoApellido from Autor";

                ds = new DataSet();
                DbCommand cmd = c.CreateCommand();
                cmd.CommandText = queryString;

                //DbDataAdapter aAutores = new DbDataAdapter();
                //aAutores.SelectCommand = cmd;

                aAutores.Fill(ds, "Autor");

                //DbCommandBuilder ccbA = new DbCommandBuilder(aAutores);

                CerrarConexion();

                return ds;

    Gracias un saludo.

    jueves, 3 de febrero de 2011 11:45
  • :-)
    Hola,

    Personalmente yo no usaría DataAdapters ni DataSets tipados, pero tal vez esto te pueda ayudar.

    DbProviderFactory.CreateDataAdapter:

    http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactory.createdataadapter.aspx

    Saludos,


    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Follow me on Facebook or Twitter!

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Geeks: http://geeks.ms/blogs/lfranco

    jueves, 3 de febrero de 2011 12:09
    Moderador