vistas vista ventajas varias una tipos tablas tabla resultado parametros insertar ejemplos desventajas datos crear creacion consulta con caracteristicas .net vb.net datagridview oledb

.net - ventajas - tipos de vistas en base de datos



Búsqueda de valores a través de una vista de cuadrícula de datos (1)

Te estás metiendo en tu camino creando New objetos DB una y otra vez. Si el DataAdapter fuera una variable de nivel de formulario, tendría que escribir mucho menos código:

Public Class Form1 '' declare some persistant DB objects Private myDT As DataTable Private myDA As OleDbDataAdapter Private myStudentsDataView As DataView Private dbConnStr As String = "(your connection string)"

Estos se acaban de declarar, no hay ninguna instancia de ellos (no hay New ). Pero donde se declaran determina el Scope . Estarán disponibles hasta que se cierre el formulario (o los sobrescribas con Dim y / o New ). Carga de formulario:

'' initialize the objects Dim sql = "SELECT A, B, C, D... FROM Students" '' this is the ONLY place you use NEW '' with these objects myDT = New DataTable() '' The Adapter can create its own Connection '' and SelectCommand myDA = New OleDbDataAdapter(sql, dbConnStr) Dim myCB As New OleDbCommandBuilder(da) '' "teach" the DA how to Update and Add: myDA.UpdateCommand = myCB.GetUpdateCommand myDA.InsertCommand = myCB.GetInsertCommand myDA.DeleteCommand = myCB.GetDeleteCommand myDA.Fill(myDT) myDA.FillSchema(myDT, SchemaType.Source) myStudentsDataView = myDT.DefaultView dgvStudents.DataSource = myStudentsDataView

El DataAdapter necesita un objeto de conexión para funcionar, pero como el comentario menciona en lugar de crear uno explícitamente, el Adaptador puede crear el suyo. Lo abrirá y cerrará según lo necesite. Lo mismo es cierto para el SelectCommand : creará el suyo a partir de la instrucción SELECT SQL aprobada.

Tenga en cuenta que es mejor especificar cada columna en el orden en que desea que las columnas aparezcan en la DataTable . Lo importante es que al final DataAdapter sepa cómo eliminar, insertar y actualizar filas. ¡Mientras no lo destruya ni lo reemplace, no tendrá que escribir ningún SQL para Agregar o Cambiar filas!

En la mayoría de los casos, DataTable se usa como DataSource para un DGV:

myDGV.DataSource = myDT

El DGV creará las columnas necesarias y mostrará los datos como filas. A medida que el usuario escribe en las celdas, esos cambios se reflejan en la DataTable por lo que no hay necesidad de ningún código para recuperarlo.

En los casos en que el usuario edita datos en DataGridView , esto es todo lo que necesita para enviar los cambios a la base de datos:

myDa.Update(myDT)

En este caso , según las preguntas anteriores, los datos se originan a partir de controles de texto en lugar de DGV. Entonces:

Private Sub AddStudent() '' no need to (RE)create DataAdapter '' add the data to a new row: Dim dr = myDT.NewRow dr.Item("FirstName") = textbox1.text dr.Item("LastName") = textbox2.text '' etc etc '' add the new row to the datatable myDT.Rows.Add(dr) '' with a persistent DA, this is all you need to add a row: myDA.Update(myDT) End Sub

"Enseñamos" al DataAdapter cómo actualizar una fila en carga de formulario, por lo que la actualización de la base de datos (una vez que los datos están en el DT) es una línea de código: myDA.Update(myDT) .

DataTable rastrea si cada fila es nueva, modificada o incluso eliminada, por lo que myDA.Update(myDT) toma la acción adecuada para cada una. Si el sistema es multiusuario, puede recoger los cambios de otros usuarios:

myDa.Fill(myDT)

La búsqueda también es simple:

Private Sub Search(txt As String) myStudentsDataView.RowFilter = String.Format("LastName = ''{0}''", txt)

Para quitar el filtro:

myStudentsDataView = myDT.DefaultView

Si / cuando su DataAdapter no puede agregar, insertar, actualizar o eliminar, significa que creó uno New alguna parte. No hagas eso. Del myDataView modo, myDataView mostrará lo que esté en myDT hasta que cree un nuevo DT o DV o cambie el RowFilter .

Estoy tratando de buscar un valor específico en una base de datos ingresando texto en un cuadro de texto y luego usando SQL para consultar la base de datos y luego mostrar los resultados en la vista de cuadrícula de datos.

Aquí está el código:

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSearch.TextChanged Connection.Open() Dim dataTable As New DataTable Dim dataSet As New DataSet dataSet.Tables.Add(dataTable) Dim dataAdapter As New OleDbDataAdapter Dim SQLQuery As String SQLQuery = <sql> SELECT * FROM Students WHERE StudentFirstName = @StudentFirstName </sql> .Value dataAdapter = New OleDbDataAdapter(SQLQuery, Connection) dataAdapter.SelectCommand.Parameters.Add("@StudentFirstName", SqlDbType.Text).Value = txtStudentFirstname.Text dataAdapter.Fill(dataTable) dgrStudentDatabaseViewer.DataSource = dataTable.DefaultView ShowItems() Connection.Close() End Sub

la llamada a ShowItems () actualiza la vista de cuadrícula de datos aquí está el código para ello

Private Sub ShowItems() '' the following delcleration are used for displaying the contents of the table Dim dataAdapter As New OleDbDataAdapter Dim DataTable As New DataTable Dim DataSet As New DataSet Dim SQLQuery As String = <sql>SELECT * FROM Students</sql> DataSet.Tables.Add(DataTable) dataAdapter = New OleDbDataAdapter(SQLQuery, Connection) dataAdapter.Fill(DataTable) '' fills the content from the database into the table in vb net dgrStudentDatabaseViewer.DataSource = DataTable.DefaultView Connection.Close() End Sub

por el momento, cuando intento buscar nada sucede y el contenido de la vista de cuadrícula de datos permanece como siempre. Creo que podría tener algo que ver con mi literal XML de la consulta SQL, pero no puedo entenderlo.

Gracias por adelantado.