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

CrearClaseSQL

El código de la librería para generar clases para acceder a una tabla

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 o al de la librería

El código de la librería: CrearClase, CrearClaseOleDb, CrearClaseSQL, ConvLang

 

Código para Visual Basic.NET (VB.NET) El código de Visual Basic .NET

'------------------------------------------------------------------------------
' Clase para crear una clase a partir de una tabla de SQL Server    (08/Jul/04)
' Basado en el código anteriormente incluido en crearClasesSQLVB    (07/Jul/04)
'
' Todos los métodos son estáticos (compartidos) para usarlos sin crear una instancia
'
' ©Guillermo 'guille' Som, 2004
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On 
'
Imports System
Imports Microsoft.VisualBasic
'
Imports System.Data
Imports System.Data.SqlClient

Namespace elGuille.Data.CodeGenerator
    Public Class CrearClaseSQL
        Inherits CrearClase
        '
        '
        Public Shared Function Conectar(ByVal dataSource As String, _
                                        ByVal initialCatalog As String, _
                                        ByVal cadenaSelect As String) As String
            Return Conectar(dataSource, initialCatalog, cadenaSelect, "", "", False)
        End Function

        Public Shared Function Conectar(ByVal dataSource As String, _
                                        ByVal initialCatalog As String, _
                                        ByVal cadenaSelect As String, _
                                        ByVal userId As String, _
                                        ByVal password As String, _
                                        ByVal seguridadSQL As Boolean) As String
            ' si se produce algún error, se devuelve una cadena empezando por ERROR
            Conectado = False
            '
            cadenaConexion = "data source=" & dataSource & "; initial catalog=" & _
				initialCatalog & ";"
            '
            If seguridadSQL Then
                If userId <> "" Then
                    cadenaConexion &= "user id=" & userId & ";"
                End If
                If password <> "" Then
                    cadenaConexion &= "password=" & password & ";"
                End If
            Else
                cadenaConexion &= "Integrated Security=yes;"
            End If
            '
            If cadenaSelect = "" Then
                ' si no se indica la cadena Select también se conecta
                ' esto es útil para averiguar las tablas de la base
                Conectado = True
                Return ""
            End If
            '
            Dim dbDataAdapter As New SqlDataAdapter(cadenaSelect, cadenaConexion)
            '
            dbDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
            Try
                dbDataAdapter.Fill(mDataTable)
                System.Threading.Thread.Sleep(100)
                Conectado = True
            Catch ex As Exception
                Return "ERROR: en Fill: " & ex.Message '& " - " & ex.GetType().Name
            End Try
            '
            Return ""
        End Function
        '
        Public Shared Function NombresTablas() As String()
            Dim nomTablas() As String
            Dim dt As New DataTable
            Dim i As Integer
            Dim dbConnection As New SqlConnection(cadenaConexion)
            '
            Try
                dbConnection.Open()
            Catch ex As Exception
                ReDim nomTablas(0)
                nomTablas(0) = "ERROR: " & ex.Message
                Conectado = False
                Return nomTablas
            End Try
            '
            Dim schemaDA As New SqlDataAdapter( _
		"SELECT * FROM INFORMATION_SCHEMA.TABLES " & _
		"WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_TYPE", _
		dbConnection)
            '
            schemaDA.Fill(dt)
            i = dt.Rows.Count - 1
            If i > -1 Then
                ReDim nomTablas(i)
                For i = 0 To dt.Rows.Count - 1
                    ' si el valor de TABLE_SCHEMA no es dbo,
		    ' es que es una tabla de un usuario particular
                    If dt.Rows(i).Item("TABLE_SCHEMA").ToString().ToLower() <> "dbo" Then
                        nomTablas(i) = dt.Rows(i).Item("TABLE_SCHEMA").ToString() & _
				"." & dt.Rows(i).Item("TABLE_NAME").ToString()
                    Else
                        nomTablas(i) = dt.Rows(i).Item("TABLE_NAME").ToString()
                    End If
                Next
            End If
            ' 
            Return nomTablas
        End Function
        '
        Public Shared Function GenerarClase(ByVal lang As eLenguaje, _
                                            ByVal usarCommandBuilder As Boolean, _
                                            ByVal nombreClase As String, _
                                            ByVal nomTabla As String, _
                                            ByVal dataSource As String, _
                                            ByVal initialCatalog As String, _
                                            ByVal cadenaSelect As String, _
                                            ByVal userId As String, _
                                            ByVal password As String, _
                                            ByVal usarSeguridadSQL As Boolean) As String
            Dim s As String
            '
            nombreTabla = nomTabla
            If nombreTabla = "" OrElse nombreClase = "" Then
                Return "ERROR, no se ha indicado el nombre de la tabla o de la clase."
            End If
            s = Conectar(dataSource, initialCatalog, cadenaSelect, userId, password, usarSeguridadSQL)
            If Conectado = False OrElse s <> "" Then
                Return s
            End If
            '
            Return CrearClase.GenerarClaseSQL(lang, usarCommandBuilder, nombreClase, dataSource, initialCatalog, cadenaSelect, userId, password, usarSeguridadSQL)
        End Function
        Public Shared Function GenerarClase(ByVal lang As eLenguaje, _
                                            ByVal usarCommandBuilder As Boolean, _
                                            ByVal nombreClase As String, _
                                            ByVal nomTabla As String, _
                                            ByVal dataSource As String, _
                                            ByVal initialCatalog As String, _
                                            ByVal cadenaSelect As String) As String
            '
            Return GenerarClase(lang, usarCommandBuilder, nombreClase, nomTabla, dataSource, initialCatalog, cadenaSelect, "", "", False)
        End Function
    End Class
End Namespace

...


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

//------------------------------------------------------------------------------
// Clase para crear una clase a partir de una tabla de SQL Server    (08/Jul/04)
// Basado en el código anteriormente incluido en crearClasesSQLVB    (07/Jul/04)
//
// Todos los métodos son estáticos (compartidos) para usarlos sin crear una instancia
//
// ©Guillermo 'guille' Som, 2004
//------------------------------------------------------------------------------
//
using System;
//
using System.Data;
using System.Data.SqlClient;
 
namespace elGuille.Data.CodeGenerator
{
    public class CrearClaseSQL:CrearClase
    {
        //
        //
        public static string Conectar(string dataSource, string initialCatalog, string cadenaSelect) 
        {
            return Conectar(dataSource, initialCatalog, cadenaSelect, "", "", false);
        }  
 
        public static string Conectar(string dataSource, string initialCatalog, string cadenaSelect, string userId, string password, bool seguridadSQL) 
        {
            // si se produce algún error, se devuelve una cadena empezando por ERROR
            Conectado = false;
            //
            cadenaConexion = "data source=" + dataSource + "; initial catalog=" + initialCatalog + ";";
            //
            if( seguridadSQL )
            {
                if( userId != "" )
                {
                    cadenaConexion += "user id=" + userId + ";";
                }
                if( password != "" )
                {
                    cadenaConexion += "password=" + password + ";";
                }
            }
            else
            {
                cadenaConexion += "Integrated Security=yes;";
            }
            //
            if( cadenaSelect == "" )
            {
                // si no se indica la cadena Select también se conecta
                // esto es útil para averiguar las tablas de la base
                Conectado = true;
                return "";
            }
            //
            SqlDataAdapter dbDataAdapter = new SqlDataAdapter(cadenaSelect, cadenaConexion);
            //
            dbDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
            try
            {
                dbDataAdapter.Fill(mDataTable);
                System.Threading.Thread.Sleep(100);
                Conectado = true;
            }
            catch(Exception ex)
            {
                return "ERROR: en Fill: " + ex.Message; //& [ª0001ª] & ex.GetType().Name
            }
            //
            return "";
        }  
        //
        public static String[] NombresTablas() 
        {
            string[] nomTablas = null;
            DataTable dt = new DataTable();
            int i;
            SqlConnection dbConnection = new SqlConnection(cadenaConexion);
            //
            try
            {
                dbConnection.Open();
            }
            catch(Exception ex)
            {
                nomTablas = new string[1];
                nomTablas[0] = "ERROR: " + ex.Message;
                Conectado = false;
                return nomTablas;
            }
            //
            SqlDataAdapter schemaDA = new SqlDataAdapter("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_TYPE", dbConnection);
            //
            schemaDA.Fill(dt);
            i = dt.Rows.Count - 1;
            if( i > -1 )
            {
                nomTablas = new string[(i + 1)];
                for(i = 0; i <= dt.Rows.Count - 1; i++)
                {
                    // si el valor de TABLE_SCHEMA no es dbo, es que es una tabla de un usuario particular
                    if( dt.Rows[i]["TABLE_SCHEMA"].ToString().ToLower() != "dbo" )
                    {
                        nomTablas[i] = dt.Rows[i]["TABLE_SCHEMA"].ToString() + "." + dt.Rows[i]["TABLE_NAME"].ToString();
                    }
                    else
                    {
                        nomTablas[i] = dt.Rows[i]["TABLE_NAME"].ToString();
                    }
                }
            }
            //
            return nomTablas;
        }  
        //
        public static string GenerarClase(eLenguaje lang, bool usarCommandBuilder, string nombreClase, string nomTabla, string dataSource, string initialCatalog, string cadenaSelect, string userId, string password, bool usarSeguridadSQL) 
        {
            string s;
            //
            nombreTabla = nomTabla;
            if( nombreTabla == "" || nombreClase == "" )
            {
                return "ERROR, no se ha indicado el nombre de la tabla o de la clase.";
            }
            s = Conectar(dataSource, initialCatalog, cadenaSelect, userId, password, usarSeguridadSQL);
            if( Conectado == false || s != "" )
            {
                return s;
            }
            //
            return CrearClase.GenerarClaseSQL(lang, usarCommandBuilder, nombreClase, dataSource, initialCatalog, cadenaSelect, userId, password, usarSeguridadSQL);
        }  
        public static string GenerarClase(eLenguaje lang, bool usarCommandBuilder, string nombreClase, string nomTabla, string dataSource, string initialCatalog, string cadenaSelect) 
        {
            //
            return GenerarClase(lang, usarCommandBuilder, nombreClase, nomTabla, dataSource, initialCatalog, cadenaSelect, "", "", false);
        }  
    }
}

...


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