El código de la utilidad para generar las clases |
Actualizado: 14/Jul/2004
Autor: Guillermo 'guille' Som
Volver al índice de Generar clases para acceder a una tabla
El código de Visual Basic .NET
'------------------------------------------------------------------------------ ' Utilidad para generar clases basadas en tablas de bases de datos (07/Jul/04) ' ' Basada en crearClasesVB (21/Mar/04) ' ' ©Guillermo 'guille' Som, 2004 '------------------------------------------------------------------------------ ' Revisiones: ' 0.0000 07/Jul/2004 Empiezo con los cambios para usar tablas SQL ' Un solo método para crear tanto código de VB como de C# ' que se apoya en la clase ConvLang ' 08/Jul/2004 Cambio bastante en el código generado ' 08/Jul/2004 Creo una clase para la conexión y generación del código ' 10/Jul/2004 Mejoras en la creación de la clase ' 13/Jul/2004 La misma aplicación para SQL y OleDb ' Las clases de creación están en una librería aparte ' 0.1000 14/Jul/2004 Publico la utilidad '------------------------------------------------------------------------------ Option Strict On Option Explicit On ' Imports System Imports System.Windows.Forms Imports Microsoft.VisualBasic ' Imports elGuille.Data.CodeGenerator Imports elGuille.Util Public Class Form1 Inherits System.Windows.Forms.Form ' Private mIni As eINI Private mApp As cApp Private ficINI As String ' Public Sub New() MyBase.New() Application.EnableVisualStyles() 'El Diseñador de Windows Forms requiere esta llamada. InitializeComponent() ' 'Agregar cualquier inicialización después de la llamada a InitializeComponent() ' End Sub ' #Region " Código generado por el Diseñador de Windows Forms " ' '... ' #End Region ' Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' centrar el formulario horizontalmente Me.Left = (Screen.PrimaryScreen.Bounds.Width - Me.Width) \ 2 ' mApp = New cApp(Me.GetType()) ficINI = mApp.Path(True) & mApp.EXEName & ".cfg" mIni = New eINI(ficINI, True) mIni.LeerIniXml() ' Me.Left = CInt(mIni.GetValue("General", "Left", Me.Left.ToString)) Me.Top = CInt(mIni.GetValue("General", "Top", Me.Top.ToString)) ' txtSelect.Text = "" txtCodigo.Text = "" txtClase.Text = "" ' 'txtDataSource.Text = System.Environment.MachineName & "\NETSDK" txtDataSource.Text = mIni.GetValue("BaseSQL", "DataSource", "(local)\NETSDK") txtInitialCatalog.Text = mIni.GetValue("BaseSQL", "InitialCatalog", "pubs") If mIni.GetValue("BaseSQL", "SeguridadSQL", "0") = "1" Then chkSeguridadSQL.Checked = True Else chkSeguridadSQL.Checked = False End If txtUserId.Text = mIni.GetValue("BaseSQL", "UserId", "") txtPassword.Text = mIni.GetValue("BaseSQL", "Password", "") ' txtNombreBase.Text = mIni.GetValue("BaseOleDb", "BaseDeDatos", "E:\gsCodigo\Vb6\Pruebas\Bases\db2000NET.mdb") txtProvider.Text = mIni.GetValue("BaseOleDb", "Provider", "Microsoft.Jet.OLEDB.4.0") txtAccessPassword.Text = mIni.GetValue("BaseOleDb", "Password", "") ' If mIni.GetValue("General", "UsarSQL", "1") = "1" Then optAccess.Checked = False optSQL.Checked = True Else optAccess.Checked = True optSQL.Checked = False End If grbSQL.Enabled = optSQL.Checked grbAccess.Enabled = optAccess.Checked ' If mIni.GetValue("General", "Lenguaje", "VB").ToLower = "vb" Then optVB.Checked = True Else optCS.Checked = True End If ' If mIni.GetValue("General", "UsarCommandBuilder", "1") = "1" Then chkUsarCommandBuilder.Checked = True Else chkUsarCommandBuilder.Checked = False End If ' btnGenerarClase.Enabled = False Panel1.Enabled = False btnGuardar.Enabled = False End Sub ' Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing guardarCfg() End Sub ' Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click Close() End Sub ' Private Sub cboTablas_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboTablas.SelectedIndexChanged txtSelect.Text = "SELECT * FROM " & cboTablas.Text Dim i As Integer = cboTablas.Text.IndexOf(".") If i > -1 Then txtClase.Text = cboTablas.Text.Substring(i + 1) Else txtClase.Text = cboTablas.Text End If End Sub ' Private Sub btnMostrarTablas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMostrarTablas.Click ' ' No tener en cuenta la cadena select para mostrar las tablas txtSelect.Text = "" If optSQL.Checked Then CrearClaseSQL.Conectar(txtDataSource.Text, txtInitialCatalog.Text, txtSelect.Text, txtUserId.Text, txtPassword.Text, chkSeguridadSQL.Checked) Else CrearClaseOleDb.Conectar(Me.txtNombreBase.Text, txtSelect.Text, txtProvider.Text, txtAccessPassword.Text) End If ' btnGenerarClase.Enabled = CrearClase.Conectado Panel1.Enabled = CrearClase.Conectado btnGuardar.Enabled = CrearClase.Conectado ' If CrearClase.Conectado = False Then Return ' Dim nomTablas() As String If optSQL.Checked Then nomTablas = CrearClaseSQL.NombresTablas() Else nomTablas = CrearClaseOleDb.NombresTablas() End If ' If (nomTablas Is Nothing) OrElse nomTablas(0).StartsWith("ERROR") Then btnGenerarClase.Enabled = False Panel1.Enabled = False btnGuardar.Enabled = False 'Return End If ' cboTablas.Items.Clear() If Not nomTablas Is Nothing Then For i As Integer = 0 To nomTablas.Length - 1 cboTablas.Items.Add(nomTablas(i)) Next End If If cboTablas.Items.Count > 0 Then cboTablas.SelectedIndex = 0 End If End Sub ' Private Sub btnGenerarClase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGenerarClase.Click ' generar la clase a partir de la tabla seleccionada If txtSelect.Text = "" Then MessageBox.Show("Debes especificar la cadena de selección de datos", "Generar clase", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) txtSelect.Focus() Return End If ' txtCodigo.Text = "" guardarCfg() ' If optVB.Checked Then If optSQL.Checked Then txtCodigo.Text = CrearClaseSQL.GenerarClase(eLenguaje.eVBNET, chkUsarCommandBuilder.Checked, txtClase.Text, cboTablas.Text, txtDataSource.Text, txtInitialCatalog.Text, txtSelect.Text, txtUserId.Text, txtPassword.Text, chkSeguridadSQL.Checked) Else txtCodigo.Text = CrearClaseOleDb.GenerarClase(eLenguaje.eVBNET, chkUsarCommandBuilder.Checked, txtClase.Text, cboTablas.Text, txtNombreBase.Text, txtSelect.Text, txtAccessPassword.Text, txtProvider.Text) End If Else If optSQL.Checked Then txtCodigo.Text = CrearClaseSQL.GenerarClase(eLenguaje.eCS, chkUsarCommandBuilder.Checked, txtClase.Text, cboTablas.Text, txtDataSource.Text, txtInitialCatalog.Text, txtSelect.Text, txtUserId.Text, txtPassword.Text, chkSeguridadSQL.Checked) Else txtCodigo.Text = CrearClaseOleDb.GenerarClase(eLenguaje.eCS, chkUsarCommandBuilder.Checked, txtClase.Text, cboTablas.Text, txtNombreBase.Text, txtSelect.Text, txtAccessPassword.Text, txtProvider.Text) End If End If End Sub ' Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click ' guarda la clase en un fichero .vb o .cs Dim sFic As String = Application.StartupPath & "\" & txtClase.Text If optVB.Checked Then sFic &= ".vb" Else sFic &= ".cs" End If Dim sw As New System.IO.StreamWriter(sFic, False, System.Text.Encoding.Default) sw.Write(txtCodigo.Text) sw.Close() End Sub ' Private Sub chkSeguridadSQL_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeguridadSQL.CheckedChanged Dim b As Boolean = chkSeguridadSQL.Checked LabelUser.Enabled = b LabelPassw.Enabled = b txtUserId.Enabled = b txtPassword.Enabled = b End Sub ' Private Sub optAccess_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optAccess.CheckedChanged grbAccess.Enabled = optAccess.Checked End Sub Private Sub optSQL_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optSQL.CheckedChanged grbSQL.Enabled = optSQL.Checked End Sub ' Private Sub txtNombreBase_DragOver( _ ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles txtNombreBase.DragOver, MyBase.DragOver e.Effect = DragDropEffects.Copy End Sub ' Private Sub txtNombreBase_DragDrop( _ ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles txtNombreBase.DragDrop, MyBase.DragDrop Dim archivos() As String ' If e.Data.GetDataPresent("FileDrop") Then archivos = CType(e.Data.GetData("FileDrop"), String()) txtNombreBase.Text = archivos(0) txtNombreBase.SelectionStart = txtNombreBase.Text.Length End If End Sub ' Private Sub btnExaminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExaminar.Click With New OpenFileDialog .Title = "Seleccionar base de datos" .Filter = "Bases de Access (*.mdb)|*.mdb" .FileName = txtNombreBase.Text If .ShowDialog = DialogResult.OK Then txtNombreBase.Text = .FileName End If End With End Sub ' Private Sub guardarCfg() mIni.SetValue("BaseSQL", "DataSource", txtDataSource.Text) mIni.SetValue("BaseSQL", "InitialCatalog", txtInitialCatalog.Text) If chkSeguridadSQL.Checked Then mIni.SetValue("BaseSQL", "SeguridadSQL", "1") Else mIni.SetValue("BaseSQL", "SeguridadSQL", "0") End If mIni.SetValue("BaseSQL", "UserId", txtUserId.Text) ' guardar siempre una cadena vacía en el password mIni.SetValue("BaseSQL", "Password", "") 'txtPassword.Text) ' mIni.SetValue("BaseOleDb", "BaseDeDatos", txtNombreBase.Text) mIni.SetValue("BaseOleDb", "Provider", txtProvider.Text) mIni.SetValue("BaseOleDb", "Password", "") 'txtAccessPassword.Text) ' If optSQL.Checked Then mIni.SetValue("General", "UsarSQL", "1") Else mIni.SetValue("General", "UsarSQL", "0") End If ' If optVB.Checked Then mIni.SetValue("General", "Lenguaje", "VB") Else mIni.SetValue("General", "Lenguaje", "C#") End If ' If chkUsarCommandBuilder.Checked Then mIni.SetValue("General", "UsarCommandBuilder", "1") Else mIni.SetValue("General", "UsarCommandBuilder", "0") End If ' If WindowState = FormWindowState.Normal Then mIni.SetValue("General", "Left", Me.Left.ToString) mIni.SetValue("General", "Top", Me.Top.ToString) End If ' mIni.SetValue("_Copyright", "Autor", "Guillermo 'guille' Som") mIni.SetValue("_Copyright", "Versión", mApp.FileVersion) mIni.SetValue("_Copyright", "Fecha", mApp.ProductName) ' mIni.GuardarIniXml() End Sub End Class...
...
//------------------------------------------------------------------------------ // Utilidad para generar clases basadas en tablas de bases de datos (07/Jul/04) // // Basada en crearClasesVB (21/Mar/04) // // ©Guillermo 'guille' Som, 2004 //------------------------------------------------------------------------------ // Revisiones: // 0.0000 07/Jul/2004 Empiezo con los cambios para usar tablas SQL // Un solo método para crear tanto código de VB como de C# // que se apoya en la clase ConvLang // 08/Jul/2004 Cambio bastante en el código generado // 08/Jul/2004 Creo una clase para la conexión y generación del código // 10/Jul/2004 Mejoras en la creación de la clase // 13/Jul/2004 La misma aplicación para SQL y OleDb // Las clases de creación están en una librería aparte // 0.1000 14/Jul/2004 Publico la utilidad //------------------------------------------------------------------------------ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; // using elGuille.Data.CodeGenerator; using elGuille.Util; namespace crearClasesCS { public class Form1:System.Windows.Forms.Form { // private eINI mIni; private cApp mApp; private string ficINI; // public Form1() : base() { Application.EnableVisualStyles(); //El Diseñador de Windows Forms requiere esta llamada. InitializeComponent(); // //Agregar cualquier inicialización después de la llamada a InitializeComponent() // } // #region Código generado por el Diseñador de Windows Forms // //... // #endregion // /// <summary> /// Punto de entrada principal de la aplicación. /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } // private void Form1_Load(System.Object sender, System.EventArgs e) { // centrar el formulario horizontalmente this.Left = (Screen.PrimaryScreen.Bounds.Width - this.Width) / 2; // mApp = new cApp(this.GetType()); ficINI = mApp.get_Path(true) + mApp.EXEName + ".cfg"; mIni = new eINI(ficINI, true); mIni.LeerIniXml(); // this.Left = Convert.ToInt32(mIni.GetValue("General", "Left", this.Left.ToString())); this.Top = Convert.ToInt32(mIni.GetValue("General", "Top", this.Top.ToString())); // txtSelect.Text = ""; txtCodigo.Text = ""; txtClase.Text = ""; // //txtDataSource.Text = System.Environment.MachineName & "\NETSDK" txtDataSource.Text = mIni.GetValue("BaseSQL", "DataSource", @"(local)\NETSDK"); txtInitialCatalog.Text = mIni.GetValue("BaseSQL", "InitialCatalog", "pubs"); if( mIni.GetValue("BaseSQL", "SeguridadSQL", "0") == "1" ) { chkSeguridadSQL.Checked = true; } else { chkSeguridadSQL.Checked = false; } txtUserId.Text = mIni.GetValue("BaseSQL", "UserId", ""); txtPassword.Text = mIni.GetValue("BaseSQL", "Password", ""); // txtNombreBase.Text = mIni.GetValue("BaseOleDb", "BaseDeDatos", @"E:\gsCodigo\Vb6\Pruebas\Bases\db2000NET.mdb"); txtProvider.Text = mIni.GetValue("BaseOleDb", "Provider", "Microsoft.Jet.OLEDB.4.0"); txtAccessPassword.Text = mIni.GetValue("BaseOleDb", "Password", ""); // if( mIni.GetValue("General", "UsarSQL", "1") == "1" ) { optAccess.Checked = false; optSQL.Checked = true; } else { optAccess.Checked = true; optSQL.Checked = false; } grbSQL.Enabled = optSQL.Checked; grbAccess.Enabled = optAccess.Checked; // if( mIni.GetValue("General", "Lenguaje", "VB").ToLower() == "vb" ) { optVB.Checked = true; } else { optCS.Checked = true; } // if( mIni.GetValue("General", "UsarCommandBuilder", "1") == "1" ) { chkUsarCommandBuilder.Checked = true; } else { chkUsarCommandBuilder.Checked = false; } // btnGenerarClase.Enabled = false; Panel1.Enabled = false; btnGuardar.Enabled = false; } // private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { guardarCfg(); } // private void btnSalir_Click(System.Object sender, System.EventArgs e) { Close(); } // private void cboTablas_SelectedIndexChanged(System.Object sender, System.EventArgs e) { txtSelect.Text = "SELECT * FROM " + cboTablas.Text; int i = cboTablas.Text.IndexOf("."); if( i > -1 ) { txtClase.Text = cboTablas.Text.Substring(i + 1); } else { txtClase.Text = cboTablas.Text; } } // private void btnMostrarTablas_Click(System.Object sender, System.EventArgs e) { // // No tener en cuenta la cadena select para mostrar las tablas txtSelect.Text = ""; if( optSQL.Checked ) { CrearClaseSQL.Conectar(txtDataSource.Text, txtInitialCatalog.Text, txtSelect.Text, txtUserId.Text, txtPassword.Text, chkSeguridadSQL.Checked); } else { CrearClaseOleDb.Conectar(this.txtNombreBase.Text, txtSelect.Text, txtProvider.Text, txtAccessPassword.Text); } // btnGenerarClase.Enabled = CrearClase.Conectado; Panel1.Enabled = CrearClase.Conectado; btnGuardar.Enabled = CrearClase.Conectado; // if( CrearClase.Conectado == false ) return; // string[] nomTablas; if( optSQL.Checked ) { nomTablas = CrearClaseSQL.NombresTablas(); } else { nomTablas = CrearClaseOleDb.NombresTablas(); } // if( (nomTablas == null) || nomTablas[0].StartsWith("ERROR") ) { btnGenerarClase.Enabled = false; Panel1.Enabled = false; btnGuardar.Enabled = false; //Return } // cboTablas.Items.Clear(); if( nomTablas != null ) { for(int i= 0; i<= nomTablas.Length - 1; i++) { cboTablas.Items.Add(nomTablas[i]); } } if( cboTablas.Items.Count > 0 ) { cboTablas.SelectedIndex = 0; } } // private void btnGenerarClase_Click(System.Object sender, System.EventArgs e) { // generar la clase a partir de la tabla seleccionada if( txtSelect.Text == "" ) { MessageBox.Show("Debes especificar la cadena de selección de datos", "Generar clase", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtSelect.Focus(); return; } // txtCodigo.Text = ""; guardarCfg(); // if( optVB.Checked ) { if( optSQL.Checked ) { txtCodigo.Text = CrearClaseSQL.GenerarClase(eLenguaje.eVBNET, chkUsarCommandBuilder.Checked, txtClase.Text, cboTablas.Text, txtDataSource.Text, txtInitialCatalog.Text, txtSelect.Text, txtUserId.Text, txtPassword.Text, chkSeguridadSQL.Checked); } else { txtCodigo.Text = CrearClaseOleDb.GenerarClase(eLenguaje.eVBNET, chkUsarCommandBuilder.Checked, txtClase.Text, cboTablas.Text, txtNombreBase.Text, txtSelect.Text, txtAccessPassword.Text, txtProvider.Text); } } else { if( optSQL.Checked ) { txtCodigo.Text = CrearClaseSQL.GenerarClase(eLenguaje.eCS, chkUsarCommandBuilder.Checked, txtClase.Text, cboTablas.Text, txtDataSource.Text, txtInitialCatalog.Text, txtSelect.Text, txtUserId.Text, txtPassword.Text, chkSeguridadSQL.Checked); } else { txtCodigo.Text = CrearClaseOleDb.GenerarClase(eLenguaje.eCS, chkUsarCommandBuilder.Checked, txtClase.Text, cboTablas.Text, txtNombreBase.Text, txtSelect.Text, txtAccessPassword.Text, txtProvider.Text); } } } // private void btnGuardar_Click(System.Object sender, System.EventArgs e) { // guarda la clase en un fichero .vb o .cs string sFic = Application.StartupPath + @"\" + txtClase.Text; if( optVB.Checked ) { sFic += ".vb"; } else { sFic += ".cs"; } System.IO.StreamWriter sw = new System.IO.StreamWriter(sFic, false, System.Text.Encoding.Default); sw.Write(txtCodigo.Text); sw.Close(); } // private void chkSeguridadSQL_CheckedChanged(System.Object sender, System.EventArgs e) { bool b = chkSeguridadSQL.Checked; LabelUser.Enabled = b; LabelPassw.Enabled = b; txtUserId.Enabled = b; txtPassword.Enabled = b; } // private void optAccess_CheckedChanged(System.Object sender, System.EventArgs e) { grbAccess.Enabled = optAccess.Checked; } private void optSQL_CheckedChanged(System.Object sender, System.EventArgs e) { grbSQL.Enabled = optSQL.Checked; } // private void txtNombreBase_DragOver( object sender, System.Windows.Forms.DragEventArgs e) { e.Effect = DragDropEffects.Copy; } // private void txtNombreBase_DragDrop( object sender, System.Windows.Forms.DragEventArgs e) { string[] archivos; // if( e.Data.GetDataPresent("FileDrop") ) { archivos = (( String[])e.Data.GetData("FileDrop")); txtNombreBase.Text = archivos[0]; txtNombreBase.SelectionStart = txtNombreBase.Text.Length; } } // private void btnExaminar_Click(System.Object sender, System.EventArgs e) { OpenFileDialog oOpenFileDialog = new OpenFileDialog(); oOpenFileDialog.Title = "Seleccionar base de datos"; oOpenFileDialog.Filter = "Bases de Access (*.mdb)|*.mdb"; oOpenFileDialog.FileName = txtNombreBase.Text; if( oOpenFileDialog.ShowDialog() == DialogResult.OK ) { txtNombreBase.Text = oOpenFileDialog.FileName; } } // private void guardarCfg() { mIni.SetValue("BaseSQL", "DataSource", txtDataSource.Text); mIni.SetValue("BaseSQL", "InitialCatalog", txtInitialCatalog.Text); if( chkSeguridadSQL.Checked ) { mIni.SetValue("BaseSQL", "SeguridadSQL", "1"); } else { mIni.SetValue("BaseSQL", "SeguridadSQL", "0"); } mIni.SetValue("BaseSQL", "UserId", txtUserId.Text); // guardar siempre una cadena vacía en el password mIni.SetValue("BaseSQL", "Password", ""); //txtPassword.Text) // mIni.SetValue("BaseOleDb", "BaseDeDatos", txtNombreBase.Text); mIni.SetValue("BaseOleDb", "Provider", txtProvider.Text); mIni.SetValue("BaseOleDb", "Password", ""); //txtAccessPassword.Text) // if( optSQL.Checked ) { mIni.SetValue("General", "UsarSQL", "1"); } else { mIni.SetValue("General", "UsarSQL", "0"); } // if( optVB.Checked ) { mIni.SetValue("General", "Lenguaje", "VB"); } else { mIni.SetValue("General", "Lenguaje", "C#"); } // if( chkUsarCommandBuilder.Checked ) { mIni.SetValue("General", "UsarCommandBuilder", "1"); } else { mIni.SetValue("General", "UsarCommandBuilder", "0"); } // if( WindowState == FormWindowState.Normal ) { mIni.SetValue("General", "Left", this.Left.ToString()); mIni.SetValue("General", "Top", this.Top.ToString()); } // mIni.SetValue("_Copyright", "Autor", "Guillermo 'guille' Som"); mIni.SetValue("_Copyright", "Versión", mApp.FileVersion); mIni.SetValue("_Copyright", "Fecha", mApp.ProductName); // mIni.GuardarIniXml(); } } }...