none
Consulta con un reader RRS feed

  • Pregunta

  • hasta ahora solo he usado el reader cuando voy a hacer una consulta por ejemplo:

    Private Sub SacCarProdForm1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            Label1.Text = DateTime.Now.ToString("dd/MM/yyyy")

            Using MeCnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Sacromonte\SacAudit.accdb;Persist Security Info=False")

                Dim MeQuery As String = "SELECT * FROM ProdCar WHERE Fecha = @fecha"

                Dim MeCmd As New OleDbCommand(MeQuery, MeCnn)

                MeCmd.Parameters.AddWithValue("fecha", DateTime.Now.ToString("dd/MM/yyyy"))

                MeCnn.Open()

                Dim reader As OleDbDataReader = MeCmd.ExecuteReader()

                If reader.Read() Then
                    SacCarProdBox1.Text = CStr(reader("Lengua"))
                    SacCarProdBox2.Text = CStr(reader("FilAdob"))
                    SacCarProdBox3.Text = CStr(reader("Adobada"))
                    SacCarProdBox4.Text = CStr(reader("Chamorro"))
                    SacCarProdBox5.Text = CStr(reader("Corona"))
                    SacCarProdBox6.Text = CStr(reader("Costillas"))
                    SacCarProdBox7.Text = CStr(reader("FilRes"))
                    SacCarProdBox8.Text = CStr(reader("Pacholas"))
                    SacCarProdBox9.Text = CStr(reader("PoZapo"))
                    SacCarProdBox10.Text = CStr(reader("PoDeli"))
                    SacCarProdBox11.Text = CStr(reader("Robalo"))
                    SacCarProdBox12.Text = CStr(reader("PezBl"))
                    SacCarProdBox13.Text = CStr(reader("RibEye"))
                    SacCarProdBox14.Text = CStr(reader("Vacio"))
                    SacCarProdBox15.Text = CStr(reader("PoMole"))
                    SacCarProdBox16.Text = CStr(reader("Salmon"))
                    SacCarProdBox17.Text = CStr(reader("Chava"))
                    SacCarProdBox18.Text = CStr(reader("Pato"))
                    ReadOnlyTextBox(True)
                End If

            End Using

    pero quisiera saber si  puedo usarlo con una query de tipo insert, es decir que no lee datos en la tabla inserte y si lee pues no.

    domingo, 31 de enero de 2010 8:09

Respuestas

  • hola

    mas alla que uses sql server o access , o mysql, la tecnica es identica, todos los providers implementan ado.net por lo cual la estructura es la misma

    solo debes cambiar donde dice Sql por OleDb y listo eso es todo

    aqui lo adapte para access

    Using conn As New OleDbConnection ("connection string")
        conn.Open()
      
        Dim sql As String = "INSERT INTO <tabla> (campo1, campo2)" & _
                            "VALUES (@Iparam1, @param2)"

        Dim command As New OleDbCommand (sql, conn)
        command.Parameters.AddWithValue("param1", valo1)
        command.Parameters.AddWithValue("param2", valor2)

        Dim rowsAffected As Integer = command.ExecuteNonQuery()

        If rowsAffected > 0 Then
            Return True
        Else
            Return False
        End If
      
    End Using

    comparalo veras la diferencia, jeje si casi no existe, solo dos reemplazos y esta adaptado


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta jtorrecillaModerator martes, 2 de febrero de 2010 7:07
    • Marcado como respuesta Xinef sábado, 6 de febrero de 2010 0:51
    martes, 2 de febrero de 2010 2:06

Todas las respuestas

  • Hola, como su nombre indica "reader" no se puede utilizar para otra cosa, lo que deberias hacer es que si el reader no te devuelve ningun dato, a traves de un objeto de tipo comando 
    Si la respuesta te ha sido util Marcala como Respuesta o Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    domingo, 31 de enero de 2010 8:15
    Moderador
  • hola

    si necesitas ejecutar consultas tipo INSERT, UPDATE o DELETE
    directamente usa el SqlCommand

    algo como esto

    Using conn As New SqlConnection("connection string")
        conn.Open()
       
        Dim sql As String = "INSERT INTO <tabla> (campo1, campo2)" & _
                            "VALUES (@Iparam1, @param2)"

        Dim command As New SqlCommand(sql, conn)
        command.Parameters.AddWithValue("param1", valo1)
        command.Parameters.AddWithValue("param2", valor2)

        Dim rowsAffected As Integer = command.ExecuteNonQuery()

        If rowsAffected > 0 Then
            Return True
        Else
            Return False
        End If
       
    End Using


    como veras la clave aqu es usar el metodo ExecuteNonQuery del SqlCommand

    aqui veras muchos ejemplo sobre el tema
    [ADO.NET] – Parte 5 - Ejemplos Simples – Operacion CRUD

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 31 de enero de 2010 14:23
  • Si el problema esque uso access 2007 para eso.

    lunes, 1 de febrero de 2010 23:56
  • hola

    mas alla que uses sql server o access , o mysql, la tecnica es identica, todos los providers implementan ado.net por lo cual la estructura es la misma

    solo debes cambiar donde dice Sql por OleDb y listo eso es todo

    aqui lo adapte para access

    Using conn As New OleDbConnection ("connection string")
        conn.Open()
      
        Dim sql As String = "INSERT INTO <tabla> (campo1, campo2)" & _
                            "VALUES (@Iparam1, @param2)"

        Dim command As New OleDbCommand (sql, conn)
        command.Parameters.AddWithValue("param1", valo1)
        command.Parameters.AddWithValue("param2", valor2)

        Dim rowsAffected As Integer = command.ExecuteNonQuery()

        If rowsAffected > 0 Then
            Return True
        Else
            Return False
        End If
      
    End Using

    comparalo veras la diferencia, jeje si casi no existe, solo dos reemplazos y esta adaptado


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta jtorrecillaModerator martes, 2 de febrero de 2010 7:07
    • Marcado como respuesta Xinef sábado, 6 de febrero de 2010 0:51
    martes, 2 de febrero de 2010 2:06