Índice de la sección dedicada a .NET (en el Guille)

El código de la utilidad para generar las clases

Código para Visual Basic.NET (VB.NET)

Código para C Sharp (C#)

Actualizado: 14/Jul/2004
Autor: Guillermo 'guille' Som

Volver al índice de Generar clases para acceder a una tabla

 

Código para Visual Basic.NET (VB.NET) 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

...


Código para C Sharp (C#) El código de C#

...

//------------------------------------------------------------------------------
// 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();
     }  
   }
}

...


la Luna del Guille o... el Guille que está en la Luna... tanto monta...