Visual Basic.NET - Apoyo con Query MySQL

 
Vista:
sin imagen de perfil

Apoyo con Query MySQL

Publicado por Antonio (3 intervenciones) el 01/11/2021 17:33:25
Hola a todos,

Me encuentro realizando un proyecto para actualizar una lista de precios mediante una Aplicación de Windows Form .Net Frameword 4.7. La lista de precios se obtiene al realizar una consulta a una base de datos SQL Server de servidor local físico (//Servidor1) y actualiza una base de datos MySQL (MariaDB 10.3.31) alojado en un VPS online. Todo va bien hasta que intento realizar el query de actualización de datos, me arroja el error "No se logró realizar la consulta por Unkown column Ds.DT1.Precios1 in Field list"

¿Alguien podría ayudarme por favor? Les dejo el código a continuación.

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports MySql.Data.MySqlClient
Imports System.Data.Common

Public Class Form1
' 1 - Definir variables -
Dim conSQL As New SqlConnection("Data Source=SERVIDOR1;Initial Catalog=bd_precios;Persist Security Info=True;User ID=test_precios;Password=test")
Dim conMySQL As New MySqlConnection("Server=192.168.100.254;Integrated Security=Yes;SSLMode=None;Database=bd_app;User Id=App_Test;Password=test")
Dim Ds As New DataSet
Dim DT1, DT2 As DataTable
Dim DTRow As DataRow
Dim DTCol As DataColumn
Dim AdapSQL As SqlDataAdapter
Dim AdapMySQL As MySqlDataAdapter
Dim cmdSQL As SqlCommand
Dim cmdMySQL As MySqlCommand
Dim cmdMySQLBuider As New MySqlCommandBuilder
Dim LeerSQL, LeerMySQL, InsertarMySQL, LeerDatos, ClonarDatos As String
Dim PrecioSQL, PrecioMySQL, idSQL, idMySQL As String
Dim ReaderMySQL As MySqlDataReader

' 2 - Procedimiento para la conexion SQL Server -
Private Sub conexionSQL()
Try
conSQL.Open()
MsgBox("Conexión realizada de manera exitosa", MsgBoxStyle.Information, "App Super")
conSQL.Close()
Catch ex As Exception
MsgBox("No se logro realizar la conexión debido: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
End Sub

' 3 - Procedimiento para la conexion MySQL Server -
Private Sub conexionMySQL()
Try
conMySQL.Open()
MsgBox("Conexión realizada de manera exitosa", MsgBoxStyle.Information, "App Super")
conMySQL.Close()
Catch ex As Exception
MsgBox("No se logro realizar la conexión debido: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
End Sub

' 4 - Procedimiento para la consulta SQL Server -
Private Sub consultaSQL()
Try
DT1 = New DataTable("DT1")
Ds.Tables.Add(DT1)
LeerSQL = "Select Articulo, Nombre, Precios1 From dbo.Precios1"
AdapSQL = New SqlDataAdapter(LeerSQL, conSQL)
AdapSQL.Fill(DT1)
DGTablaSQL.DataSource = DT1
Catch ex As Exception
MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
End Sub

' 4 - Procedimiento para la consulta MySQL Server -
Private Sub consultaMySQL()
Try
DT2 = New DataTable("DT2")
Ds.Tables.Add(DT2)
LeerMySQL = "Select id, titulo, precio From productos"
AdapMySQL = New MySqlDataAdapter(LeerMySQL, conMySQL)
AdapMySQL.Fill(DT2)
DGTablaMySQL.DataSource = DT2
Catch ex As Exception
MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
End Sub

' 5 - Procedimiento para Actualizar Datos MySQL Server -
Private Sub consultarSQL()
Try
LeerDatos = "SELECT Ds.DT1.ArticuloID, Ds.DT1.Nombre, Ds.DT1.Precios1 FROM Ds"
Catch ex As Exception
MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical, "App Super Álvarez")
End Try
End Sub

Private Sub ActualizarMySQL()
conMySQL.Open()
Try
InsertarMySQL = "UPDATE productos SET productos.precio=Ds.DT1.Precios1 WHERE id=ArticuloID"

cmdMySQL = New MySqlCommand(InsertarMySQL, conMySQL)

ReaderMySQL = cmdMySQL.ExecuteReader

cmdMySQL.Parameters.Add("@Precios1", MySqlDbType.Double = "8,2").Value = "DT1.Precios1"

AdapMySQL.UpdateCommand = cmdMySQL

cmdMySQLBuider = New MySqlCommandBuilder(AdapMySQL)

AdapMySQL.Update(Ds, "DT2")

Catch ex As Exception
MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
conMySQL.Close()
End Sub

' 6 - Procedimiento para corroborar precios SQL Server -
Private Sub consulta2SQL()
Try
AdapSQL = New SqlDataAdapter(LeerSQL, conSQL)
AdapSQL.Fill(DT1)
DGTablaSQL.DataSource = DT1
Catch ex As Exception
MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
End Sub

' 6 - Procedimiento para corroborar precios MySQL Server -
Private Sub consulta2MySQL()
Try
AdapMySQL = New MySqlDataAdapter(LeerMySQL, conMySQL)
AdapMySQL.Fill(DT2)
DGTablaMySQL.DataSource = DT2
Catch ex As Exception
MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
End Sub

' 7 - Ejecutar Procedimientos -
Private Sub BtnLeer_Click(sender As Object, e As EventArgs) Handles BtnLeer.Click
consultaSQL()
consultaMySQL()
End Sub

Private Sub BtnActualizar_Click(sender As Object, e As EventArgs) Handles BtnActualizar.Click
ActualizarMySQL()
End Sub

Private Sub BtnComprobar_Click(sender As Object, e As EventArgs) Handles BtnComprobar.Click
consulta2SQL()
consulta2MySQL()
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = "Actualizar Precios"
End Sub
End Class
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Apoyo con Query MySQL

Publicado por Phil Rob (1554 intervenciones) el 01/11/2021 18:14:15
Hola,

El mensaje "... me arroja el error "No se logró realizar la consulta por Unkown column Ds.DT1.Precios1 in Field list ..." parece claro. Existe en tu frase SQL, un nombre de campo que no existe en la DB.

Deberías mirar los campos de las tablas en la DB.

En tu mensaje, vemos tus códigos, pero no vemos las tablas de la DB.

Espero que este te ayudará ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Apoyo con Query MySQL

Publicado por Antonio (3 intervenciones) el 01/11/2021 18:29:17
En esta sección hago la consulta a SQL Server y obtengo los datos. Estos campos son asignados a mi DataSet y DataTable

' 4 - Procedimiento para la consulta SQL Server -
Private Sub consultaSQL()
Try
DT1 = New DataTable("DT1")
Ds.Tables.Add(DT1)
LeerSQL = "Select Articulo, Nombre, Precios1 From dbo.Precios1"
AdapSQL = New SqlDataAdapter(LeerSQL, conSQL)
AdapSQL.Fill(DT1)
DGTablaSQL.DataSource = DT1
Catch ex As Exception
MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
End Sub

Como lo comentaba desde un principio, todo va bien al realizar las consultas a ambas bases de datos y obtener los valores. El problema surge cuando quiero actualizar los valores de precios de la BD de MySQL a partir de los valores de precios de la BD de SQL Server. Ya he intentado diferentes métodos pero no he logrado obtener un resultado satisfactorio lamentablemente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Apoyo con Query MySQL

Publicado por Phil Rob (1554 intervenciones) el 01/11/2021 18:56:44
Prueba este :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub consultaSQL()
Try
Dim DT1 = New DataTable
 
LeerSQL = "Select Articulo, Nombre, Precios1 From dbo.Precios1"
 
AdapSQL = New SqlDataAdapter(LeerSQL, conSQL)
AdapSQL.Fill(DT1)
 
DT1.TableName = "DT1"  ' si quieres este nombre, si n o escribe  esta frase, el nombre del DataTable sera Precios1
 
Ds.Tables.Add(DT1)
DGTablaSQL.DataSource = DT1
Catch ex As Exception
MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Apoyo con Query MySQL

Publicado por Antonio (3 intervenciones) el 01/11/2021 19:20:43
Lo intenté pero me sigue dando el mismo error. Cómo comentaba el error lo obtengo a la hora de querer ejecutar lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub ActualizarMySQL()
conMySQL.Open()
Try
InsertarMySQL = "UPDATE productos SET productos.precio=Ds.DT1.Precios1 WHERE id=ArticuloID"
 
cmdMySQL = New MySqlCommand(InsertarMySQL, conMySQL)
 
ReaderMySQL = cmdMySQL.ExecuteReader
 
cmdMySQL.Parameters.Add("@Precios1", MySqlDbType.Double = "8,2").Value = "DT1.Precios1"
 
AdapMySQL.UpdateCommand = cmdMySQL
 
cmdMySQLBuider = New MySqlCommandBuilder(AdapMySQL)
 
AdapMySQL.Update(Ds, "DT2")
 
Catch ex As Exception
MsgBox("No se logro realizar la consulta por: " & ex.Message, MsgBoxStyle.Critical, "App Super")
End Try
conMySQL.Close()
End Sub
 
Private Sub BtnActualizar_Click(sender As Object, e As EventArgs) Handles BtnActualizar.Click
ActualizarMySQL()
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Apoyo con Query MySQL

Publicado por Phil Rob (1554 intervenciones) el 01/11/2021 19:50:38
Tienes mucho a revisar. No puedes utilizar DataReader para hacer un UPDATE.
....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Apoyo con Query MySQL

Publicado por Phil Rob (1554 intervenciones) el 01/11/2021 20:52:20
Continuación...

He dicho mal. Deberá decir : no puedes hacer ExecuteReader con otro consulta de SELECT.

Para INSERT, UPDATE Y DELETE, debes utilizar EXECUTENONQUERY.

Utilizas ExecuteReader para un SELECT que da varios resultados y utilizas ExecuteScalar para un SELECT que da una sola repuesta, por ejemplo, SELECT COUNT(UnCampo) FROM UnaTabla.

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar