none
como realizar consultas de SQL en un formulario en tiempo de ejecucion?? RRS feed

  • Pregunta

  • Que tal buen dia, estoy haciendo un sistema manejador de bases de datos en visual studio 2010 con una base de datos de SQL Compact 3.5, pero necesito realizar consultas de SQL en tiempo de ejcucion, como se hace?? espero puedan ayudarme o pasarme algo de informacion sobre el tema, gracias!
    sábado, 28 de mayo de 2011 15:33

Respuestas

  • Puedes crear metodos que represente cada una de la operacioes: SelectByID, SelectALL, Update, Delete, Insert

    Luego dentro del formulario o puede crear una clase aparte y colocar alli cada uno de estos metodos estos te garantiza la reutilizacion los mismo metodos en todos los formularios que quieran invocarlos.

    Puedes utilizar los eventos para invocar el metodo deseado, ejemplo en el evento clic del boton

    Verificate este ejemplo, esta hecho para aplicacion aspnet pero el enfoque fundamentar es la implementaciones utilizada

    Ejemplo de objeto de origen ObjectDataSource

    Verificate este otro ejemplo, el cual retorna un dataset en el ambito que se invoque

    C#

        public static DataSet SelectByDate(DateTime date)
        {
          using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConectionStringName"].ConnectionString))
          {
            String query = "SELECT ColumName FROM TableName WHERE ColumnName LIKE @ParameterName";
    
            using (SqlCommand command = new SqlCommand(query, connection))
            {
              command.CommandType = CommandType.Text;
    
              command.Parameters.AddWithValue("@ParameterName", date);
    
              DataSet ds = new DataSet();
    
              SqlDataAdapter da = new SqlDataAdapter();
    
              da.SelectCommand = command;
    
              try
              {
                connection.Open();
                da.Fill(ds);
              }
              finally
              {
                connection.Close();
              }
              return ds;
            }
          }
        }
    

    VB

        public static DataSet SelectByDate(DateTime date)
        {
          using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConectionStringName"].ConnectionString))
          {
            String query = "SELECT ColumName FROM TableName WHERE ColumnName LIKE @ParameterName";
    
            using (SqlCommand command = new SqlCommand(query, connection))
            {
              command.CommandType = CommandType.Text;
    
              command.Parameters.AddWithValue("@ParameterName", date);
    
              DataSet ds = new DataSet();
    
              SqlDataAdapter da = new SqlDataAdapter();
    
              da.SelectCommand = command;
    
              try
              {
                connection.Open();
                da.Fill(ds);
              }
              finally
              {
                connection.Close();
              }
              return ds;
            }
          }
        }
    

    En el caso de que este creando una clase aparte para colocar alli cada uno de estos metodos, debera agregar una directiva USING NAMESPACE para poder utilizar los metodos sin la necesidad de hacer una referencia completa al ensamblado.

    puede usar el metodo Load del formulario para invocar el metodo, ejemplo:

    C#

     private void Form1_Load(object sender, EventArgs e)
        {
           grilla.Datasource = SelectByDate(Convert.ToDateTime(textBox1.Text));
        }

    VB

    Private Sub Form1_Load(sender As Object, e As EventArgs)
    	grilla.Datasource = SelectByDate(Convert.ToDateTime(textBox1.Text))
    End Sub
    

    Ver tambien

    SqlDataReader (Clase)


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    sábado, 28 de mayo de 2011 16:18

Todas las respuestas

  • Puedes crear metodos que represente cada una de la operacioes: SelectByID, SelectALL, Update, Delete, Insert

    Luego dentro del formulario o puede crear una clase aparte y colocar alli cada uno de estos metodos estos te garantiza la reutilizacion los mismo metodos en todos los formularios que quieran invocarlos.

    Puedes utilizar los eventos para invocar el metodo deseado, ejemplo en el evento clic del boton

    Verificate este ejemplo, esta hecho para aplicacion aspnet pero el enfoque fundamentar es la implementaciones utilizada

    Ejemplo de objeto de origen ObjectDataSource

    Verificate este otro ejemplo, el cual retorna un dataset en el ambito que se invoque

    C#

        public static DataSet SelectByDate(DateTime date)
        {
          using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConectionStringName"].ConnectionString))
          {
            String query = "SELECT ColumName FROM TableName WHERE ColumnName LIKE @ParameterName";
    
            using (SqlCommand command = new SqlCommand(query, connection))
            {
              command.CommandType = CommandType.Text;
    
              command.Parameters.AddWithValue("@ParameterName", date);
    
              DataSet ds = new DataSet();
    
              SqlDataAdapter da = new SqlDataAdapter();
    
              da.SelectCommand = command;
    
              try
              {
                connection.Open();
                da.Fill(ds);
              }
              finally
              {
                connection.Close();
              }
              return ds;
            }
          }
        }
    

    VB

        public static DataSet SelectByDate(DateTime date)
        {
          using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConectionStringName"].ConnectionString))
          {
            String query = "SELECT ColumName FROM TableName WHERE ColumnName LIKE @ParameterName";
    
            using (SqlCommand command = new SqlCommand(query, connection))
            {
              command.CommandType = CommandType.Text;
    
              command.Parameters.AddWithValue("@ParameterName", date);
    
              DataSet ds = new DataSet();
    
              SqlDataAdapter da = new SqlDataAdapter();
    
              da.SelectCommand = command;
    
              try
              {
                connection.Open();
                da.Fill(ds);
              }
              finally
              {
                connection.Close();
              }
              return ds;
            }
          }
        }
    

    En el caso de que este creando una clase aparte para colocar alli cada uno de estos metodos, debera agregar una directiva USING NAMESPACE para poder utilizar los metodos sin la necesidad de hacer una referencia completa al ensamblado.

    puede usar el metodo Load del formulario para invocar el metodo, ejemplo:

    C#

     private void Form1_Load(object sender, EventArgs e)
        {
           grilla.Datasource = SelectByDate(Convert.ToDateTime(textBox1.Text));
        }

    VB

    Private Sub Form1_Load(sender As Object, e As EventArgs)
    	grilla.Datasource = SelectByDate(Convert.ToDateTime(textBox1.Text))
    End Sub
    

    Ver tambien

    SqlDataReader (Clase)


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    sábado, 28 de mayo de 2011 16:18
  • soy nuevo en esto de programar en visual y hacer conexiones de bases de datos, son muy buenos tus ejemplos xD, gracias por la ayuda!! saludos desde mexico!
    domingo, 29 de mayo de 2011 2:08
  • De acuerdo a los ejemplos y segun lo que entendí, hice lo siguiente dentro de un windows form con cuatro cajas de texto, cada una para especificar las sentencias 
    
    de sql, select, from, where y order by respectivamente, ademas del boton de realizar consulta:
    
    Public Class Form15
    
      Private Sub Form15_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'PastelDataSet.compra' table. You can move, or remove it, as needed.
        Me.CompraTableAdapter.Fill(Me.PastelDataSet.compra)
      End Sub
    
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim a As String = "SELECT " + TextBox1.Text + "FROM " + TextBox2.Text + "WHERE " + TextBox3.Text + "ORDER BY " + TextBox4.Text
        consulta(a)
      End Sub
    
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Form2.Show()
        Me.Close()
      End Sub
    
      Private Function consulta(ByVal querystring As String)
        Dim connection As New SqlClient.SqlConnection()
        Dim command As New SqlClient.SqlCommand(querystring, connection)
        Dim reader As SqlClient.SqlDataReader = command.ExecuteReader()
    'me marca error en executereader()' 
         While reader.Read()
          Console.WriteLine(String.Format("{0}, {1}", _
            reader(0), reader(1)))
        End While
    
        reader.Close()
      End Function
    
    
    End Class
    
    
    espero y me puedan ayudar gracias!!
    
    domingo, 29 de mayo de 2011 3:39
  • hola

    hay varios puntoa que puedo remarcar

    - primero si la db que usas es Sql Compract no deberias suar SqlConnection, SqlCommand, SqlDataReader, sino que deberias usa SqlCeConnection, SqlCeCommand, SqlCeDataReader, porqu estas son als clases que debes usar para conectarte a un sdf

    referencia a la libreria System.Data.SqlServerCe

     

    - segundo, no hagas uso de estas tipicas clase que armarn la query dinamicamente, ese metodo consulta() que has creado parece que te ayuda pero te termina complciando la vida, ya que te limita a la unica posibilidad de unir la query como un string

    crea me todo que definan los nombres de las tabla y campos de forma fija usa parametros para los filtros

    el armar todo dinamico no es tan bueno. no al menso sino lo modelas bien

    crea metodos de nombre ObtenerPersonas(), ObtenerArticulos() y que estos definas la query fija que se requiere para esta operacin no la definas en tus controles porque no es repon sabilidad de la ui pasar los campos y tablas, ni la del usuario tambien hacerla

    algo como esto

     

    ADO.NET Parte 3 Actualización Información Sql Server

    ADO.NET - Parte 1 - Recuperar Información Sql Server

    Nota: en este caso tambien se usa Sqlxxx pero solo tendrias que cambiar por SqlCexxx el resto es identico

     

    - tercero, en la linea

     Dim connection As New SqlClient.SqlConnection()

    no has definir la cadena de conexion

     Dim connection As New SqlClient.SqlConnection("connection string")

    sino lo defines no sabra como conectarse a la db

    Connection strings for SQL Server Compact Edition

    en el link veras ejemplo de connection string que podrias usar

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 29 de mayo de 2011 13:08