Una simple consulta en VB, como?

i72

Estoy empezando con VB .NET y weno, se me presenta este problema:

  • Tengo la conexion a la BD creada.
  • Tengo los DATASET a las tablas correspondientes tb creados.

Como puedo ejecutar una sentencia SELECT que busque un parámetro que he introducido en un TextBox, x ejemplo el DNI.

Gracias y 1 saludo.

IS4kO

Tienes que crearte el command y asignarselo al adapter. Para Origen SQL:

Dim comandoSelect As New SqlClient.SqlCommand

comandoSelect.Connection = SqlConnection1

comandoSelect.CommandType = CommandType.Text

comandoSelect.CommandText = "Select ProductID,ProductName from Products order by ProductID"

TuAdapter = New SqlClient.SqlDataAdapter(comandoSelect)

TuAdapter.Fill(dataset, "Products")

donde haces la select, podrías poner los valores de la caja de texto que comentabas, con el DNI, por ejemplo.

i72

IS4kO lee MP please.

Soltrac

2 maneras :

1) Con mas conexiones, recomendado para bases de datos grandes.

Dim DA As New SqlDataAdapter("SELECT * FROM tuTabla WHERE DNI='" & textBox1.Text & "'",TuConexion)

Dim DS As New DataSet

DA.Fill(DS,"nombredetabla")

If DS.Tables("nombredetabla").Rows.Count = 0
MsgBox("DNI no encontrado")
Else
'Lo q kieras
End If

Pros: Hace la busqueda el servidor, no el cliente, la busqueda es mas rapida.

Contras: Hay que hacer una conexion cada vez que busques un DNI nuevo

2) Con 1 sola conexion, recomendado para bases de datos pequeñas

Dim DA As New SqlDataAdapter("SELECT * FROM tuTabla ,TuConexion)

Dim DS As New DataSet

DA.Fill(DS,"nombredetabla")

DS.Tables("nombredetabla").PrimaryKey = New Datacolumn() { DS.Tables("nombredetabla").Columns("DNI") }

Dim RowDniBuscado As DataRow= DS.Tables("nombredetabla").Rows.Find(TextBox1.Text)

If RowDniBuscado Is Nothing
MsgBox("DNI no encontrado")
Else
'Lo q kieras
End If

Pros: Solo hay 1 conexion

Contras: Al solo haber 1 conexion, te devuelve TODAS las filas lo que con bases de datos grandes y en conexiones lentas se hace muy lento

Ea done :)

IS4kO

i72

No me ha llegado nada :(

E

Me quedo con #4/1 xDDDD
Aunque como bien razona, depende del tamaño de la base de datos, de su ubicación y de otros factores.
Por ejemplo, la 2ª forma tiene la ventaja de que aunque tengas que cargar todos los datos de la tabla. Después de va a permitir hacer CreateView o Find (como bien pones) si es que tienes que hacer más consultas sobre esa misma tabla. Así no abrimos otra conexión y lanzamos otra consulta sobrecargando al servidor.
Pero vamos, #1, que por soluciones no sea xDDD

i72

please, agregarme y hablamos personalmente, gracias

[email protected]

i72

Os explico mas o menos lo que intento hacer. Tengo una tabla llamada "DATOS" donde tengo los "DNI" y "NEMPLEADO " (numero empleado).

Quiero hacer una especie de ventanita de login que pida :

Nº EMPLEADO (Seria un TextBox1)
DNI (Seria un TextBox2)

Entonces yo compruebo si los datos son correctos y continua

If (SELECT NEMPLEADO From DATOS Where DNI = TextBox2.Text) = TextBox1.Text

Es simplemente, verificar que cuando alguien escriba su numero de empleado, a continuacion va a escribir su DNI.

Gracias.

Soltrac

#8 creo q esta clarisimo no?

Te lo voy a hacer solo de la manera primera como te explique...lo otro lo sacas tu...si sigues teniendo dudas me envias un msg privado

'Arriba del todo
Imports System.Data.SqlClient

'En tu función de comprobación
Dim DA As New SqlDataAdapter("SELECT NumEmpleado FROM tuTabla WHERE DNI='" & textBox1.Text & "'",TuConexion)

Dim DS As New DataSet

DA.Fill(DS,"nombredetabla")

If DS.Tables("nombredetabla").Rows.Count = 0
MsgBox("DNI no encontrado")
Else
If DS.Tables("nombredetabla").Rows(0)("NumEmpleado") = TextBox2.Text Then
MsgBox("SE HA ENCONTRADO! WEEE!!!")
Else
MsgBox("El Numero de empleado no corresponde con el DNI buscado :(:(")
End If
End If

Ahora tu lo pones bonito y ya esta :)

E

#9, Es que me da que el dataadapter y el dataset los tiene creados en tiempo de diseño. Con lo cual, rellenarías la tabla así:

Por ejemplo:

'Esto para conectar con la dB puesto que deduzco que el objeto conexión lo tienes creado en tiempo de diseño:

If OleDbConnection1.State <> ConnectionState.Open Then OleDbConnection1.Open()

'Aquí se rellena el DataSet
OleDbDataAdapter1.Fill(TUDATASETCREADOENTIEMPODEDISEÑO)

El problema que tienes es que el fill te rellena todo el data set y no te filtra. Para filtrar no te queda otra que hacerlo como dice #9.
Te agregué al MSN el otro día, pero no he tenido mucho tiempo de conectarme. Hoy sobre las 19:30 estaré por aquí. Me conectó y te ayudo.

Usuarios habituales

  • ElTutor
  • Soltrac
  • i72
  • IS4kO