Visual Basic Foro
Programación => Visual Basic .NET / C# => Mensaje iniciado por: ssccaann43 en Agosto 06, 2012, 04:38:36 pm
-
Buenas tardes,
He estado reventandome la cabeza y buscando ejemplos para trabajar en .Net y la verdad ya me canse de no encontrar algo con lo cual me sienta satisfecho. Quizás es porque recien agarro la herramienta de Visual Basic 2008 y esta pateandome en todos los sentidos (Al menos en lo que respecta a conectarme por BD).
En la versión 6.0 para mi era simple conectarme usando un módulo y allí mediante una función ejecutaba un comando SQL y listo, sea para Insert, Delete, Update o para listar registros. Me gustaría saber si alguien tiene una manera similar de trabajar, si existe algún ejemplito que pueda ayudarme, me gustó este tema de desarrollar ahora en .Net y bueno espero lograr aprender un poco más porque la verdad me trae de cabeza.
Sin más, quedo atento a sus comentarios. ;D
-
Que BD queres conectar. Si es MySQL podes mirar el ejemplo que subi el de MB-CONTA. Lo primero es que tenes que agregar la referencia del conector de la BD.
-
Si es Access podes Hacer asi:
En un Modulo.
Imports System.Data
Imports System.Data.OleDb
Module Module1
Public strSQL As String 'Para hacer consultas
Public strQuery As String 'Para hacer los ABM
Public strConexion As New OleDbConnection
Public strComando As New OleDbCommand
Public sqlAdapter As New OleDbDataAdapter
Public sqlReader As OleDbDataReader
Public strTransac As OleDbTransaction
Public P01, P02, P03 As String
Public Sub ConectarAcess()
Try
If strConexion.State = ConnectionState.Closed Then
strConexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\xxx\Database1.mdb; User Id=admin;Password=;"
strConexion.Open()
strComando.Connection = strConexion
End If
Catch ex As Exception
MsgBox(ex.Source & "; " & ex.Message, MsgBoxStyle.Critical, "Ocurrió un error")
End Try
End Sub
End Module
En un Form muesta como hacer un insert into y recuperar los datos guardados de la BD.
Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call ConectarAcess()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
'Esto es para hacer un insert into
Try
P01 = "'HOLA'"
P02 = "'MUNDO'"
strSQL = "INSERT INTO nfactura (numero,tipo) VALUES (" & P01 & "," & P02 & ")"
strComando.CommandText = strSQL
strComando.ExecuteNonQuery()
strTransac.Commit()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
'Esto es para recuperar datos de la BD
Try
strSQL = "SELECT * FROM Clientes"
strComando = New OleDbCommand(strSQL, strConexion)
sqlReader = strComando.ExecuteReader
While sqlReader.Read
MsgBox(sqlReader("id").ToString)
End While
sqlReader.Close()
Catch ex As Exception
MsgBox(ex.Source & "; " & ex.Message, MsgBoxStyle.Critical, "Ocurrió un error")
End Try
End Sub
End Class
-
esta noche estoy subiendo el ejemplo en 3 capas, ya lo tengo terminado.
-
Bien ahí seba 8) 8) 8) 8) ;D ;D ;D
-
esta noche estoy subiendo el ejemplo en 3 capas, ya lo tengo terminado.
Excelente, aunque como posteaste en el foro de .Net supongo que lo estará hecho con .Net y no con VB6 y en ese caso me lo perderé, sera un motivo mas para estudiar .Net, aunque actualmente y por unos meses mas estoy en otros temas.
Igual, bien por ello.
-
Ssccann43 Viejo amigo, yo conozco un metodo de trabaja en VB.NET 2010 que se acopla a tu forma de trabajo, incluso y maravillosamente es de poco código y bien estructurado, tomando en cuenta que te gusta escribir sentencias en SQL (las cuales tuve que aprender bien para trabajar así) La verdad es que despues de trabajar conexiones a código en vb6 uno se acostumbra a trabajar así en vb.net pero yo le he sacado un mayor provecho y rendimiento a trabajar con dataset y con las conexiones a red no hay ningún problema, se puede crear una propiedad del sistema en Settings que podes modificar a gusto y antojo. Importas todas tus tablas y trabajas con procedimientos almacenados en la base de datos, bueno si no queres cargar la base de datos, podes trabajar con procedimientos almacenados en memoria en vb.net. Yo creo que es mucho mejor que trabajar en 3 Capas, mas rapido y tiene una gran manejavilidad. Tu mandas cuando podemos hablar y te muestro como, así te devuelvo el favor de cuando me enseñaste a trabajar en vb.6 a codigo las bases de datos. ;)
-
Hola. Puedes usar todo como si fuera visual basic 6, hay pequeñas variaciones , pero no son drásticas. Por ejemplo, a lo que te refieres seguramente es ADO, esa es la librería con la que conectabas todo tipo de base de datos en Visual basic 6, ( hablas de sentencias como insert, update y delete, por lo que supongo que no es el viejo DAO)
haber trataré de orientarte un poco.
Yo empezaría por agregar un módulo y escribir una subrutina "conectar" de tipo pública
Esto es para mysql, aca aplico con un conector odbc un poco viejo 3.51, pero puedes hacerlo con uno mas actualizado, es solo cambiar la version.
"No es un capricho que la conexión a la base de datos se establezca de forma pública. "
esto seria lo que va en el módulo
Imports ADODB
Public cn As New ADODB.Connection
Public str_SERVER As String = "127.0.0.1" ' ip o dns del servidor sea local o remoto
Public str_PORT As String = "3306" ' puerto
Public str_DATABASE As String = "nombre"
Public str_USER As String = "usuario"
Public str_PASS As String = "pass"
Public Sub Conectar()
Dim cnString As String
'cambias el string de conexión para conectar a otras bases de datos ...
cnString = "DRIVER={MySQL ODBC 3.51 Driver};" & _
"SERVER=" & str_SERVER & ";" & _
"PORT=" & str_PORT & ";" & _
"DATABASE=" & str_DATABASE & ";" & _
"USER=" & str_USER & ";" & _
"PASSWORD=" & str_PASS & ";OPTION=3;"
If cn.State <> 1 Then
cn.ConnectionString = cnString
cn.Open()
End If
End Sub
Esto puede ir donde quieras ponerlo, solo que siempre recuerda : Imports ADODB
Esto sería para agregar, solo se cambia la sentencia sql para update, delete o listar
Imports ADODB
Private Sub Agregar()
Dim RS As New ADODB.Recordset
Dim SQL As String
Dim Str_datos As String
Try
Str_datos = "'DATO1','DATO2'"
SQL = "INSERT INTO tabla (campo1,campo2) VALUES (" & Str_datos & ")"
' aca varía con respecto a vb6
RS.CursorLocation = ADODB.CursorLocationEnum.adUseClient
RS.Open(SQL, cn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
'aca lo cargas a una lista si quieres
If RS.State <> 0 Then
RS.Close()
End If
MsgBox("Los datos se han agregado en forma correcta.", vbInformation, "Agregar Datos")
Catch ex As Exception
MsgBox("Se detectaron errores al intentar cargar el dato.", vbInformation, "Error! - Agregar Datos")
If RS.State <> 0 Then
RS.Close()
End If
End Try
End Sub
No se si responde tu pregunta? ... Hay otras formas de conectar y de una manera mas conveniente (permitiendo la gestión de datos offline, actualizaciones de datos controladas, etc) , pero este es un ejemplo muy similar a lo que se hacia en vb6 ... salu2 Colega
-
pero conectarse con el ADO de visual basic 6 en .NET es como tener una ferrari con motor de fitito.
.NET tiene su propio ADO, no hace falta usar el de visual basic, justamente publique este proyecto para que vean la forma de trabajar y de conectarse:
ABM basico + SQL (.NET) (con clases) (http://leandroascierto.com/foro/index.php?topic=1833.0)
es valido para cualquier motor de base de datos.
-
pero conectarse con el ADO de visual basic 6 en .NET es como tener una ferrari con motor de fitito.
.NET tiene su propio ADO, no hace falta usar el de visual basic, justamente publique este proyecto para que vean la forma de trabajar y de conectarse:
ABM basico + SQL (.NET) (con clases) (http://leandroascierto.com/foro/index.php?topic=1833.0)
es valido para cualquier motor de base de datos.
JAJAJA, no estoy de acuerdo, ADO es muy potente ("NO semejante comparación" jejeje) ... pero vale la acotación... Hay sistemas gigantes montados sobre los pilares de ado, pero es imposible no ver las mejoras de ADO NET ... salu2 colega
http://es.wikipedia.org/wiki/ADO.NET (http://es.wikipedia.org/wiki/ADO.NET)
http://en.wikipedia.org/wiki/Comparison_of_ADO_and_ADO.NET (http://en.wikipedia.org/wiki/Comparison_of_ADO_and_ADO.NET)
-
haber si se entiende, el ADO de visual basic 6 no se usa mas en .NET, ni deberia ser usada por nadie, es una libreria COM vieja de los años 90 que usa visual basic 6, que en .NET ya ni existe, .NET ya viene con su propio ADO, que es mil veces mas potente que el ADO que usa visual basic 6 y en performance ni te digo.
y si algun sistema usa el ADO viejo del visual basic 6 en .NET esta muy mal que sea asi.
otro ejemplo clasico de mal uso, es por ejemplo el control OCX winsock de sockets de VB6, algunos que se pasan a .NET siguen usando ese OCX viejo, cuando en realidad tienen que usar las clases de manejo de sockets que ofrece .NET y que reemplazan al ocx.
saludos.
-
Saludos a todos !!! ;D
Bueno en cuanto a la forma de conexión con una BD (en mi caso, Firebird) he usado estas dos subs en un Modulo:
http://vb6firebird.com/foro/index.php/topic,14.0.html (http://vb6firebird.com/foro/index.php/topic,14.0.html)
Y en cuanto a la insersión de registros uso esta (incluye BeginTransaction -ver penúltima respuesta en ese post, que por cierto le pertenece a mi gran amigo Yvan ;D ):
http://vb6firebird.com/foro/index.php/topic,17.0.html (http://vb6firebird.com/foro/index.php/topic,17.0.html)
Esos, se los pasé a Miguel (ssccaann43).
Por cierto Seba, por fin subiste el ABM !!! y de paso, es excelente :o y lo considero muy didáctico, ssccaann43, bájatelo, te lo recomiendo !!! :o
Saludos !!!
Manuel F. Borrego S. 8)
Barcelona, Venezuela.