Hola a todos:
Parece ser que no hay nadie que me pueda resolver este problema que tengo con este tutorial
en los foros de C# o VB. Por fabor véase el tutorial siguiente:
http://msdn.microsoft.com/es-es/library/49b92ztk.aspxMi problema es el siguiente: si creo el Instalador de la base de datos tal como explica
el manual en lenguaje VB.Net no tengo ningún problema, pero su lo creo en C# no funciona.
Lo he probado 100 veces y repasado la instalación del instalador otras tantas veces, pero
no logro que funcione.
Adjunto los 2 proyectos en VB y C# disponibles para que algún experto los vea y descubra
lo que ocurre pues a mi me falta experiencia por lo visto. No logro entender lo que ocurre.
Ambos proyectos se compilan y ejecutan perfectamente sin ningún error, pero el proyecto en VB
crea la base de datos "TRIPOLIS" y el proyecto en C# no la crea.
Espero que haya alguien que me eche una manos.
Gracias
-----------------------------clase en VB.Net que funciona
Imports System.ComponentModel
Imports System.Configuration.Install
Imports System.IO
Imports System.Reflection
Imports System.Data.SqlClient
Public Class VbDeployInstaller
Dim masterConnection As New System.Data.SqlClient.SqlConnection
Public Sub New()
MyBase.New()
'El Diseñador de componentes requiere esta llamada.
InitializeComponent()
'Agregue el código de inicialización después de llamar a InitializeComponent
End Sub
Private Function GetSql(ByVal Name As String) As String
Try
' Gets the current assembly.
Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()
' Resources are named using a fully qualified name.
Dim strm As Stream = Asm.GetManifestResourceStream(
Asm.GetName().Name + "." + Name)
' Reads the contents of the embedded file.
Dim reader As StreamReader = New StreamReader(strm)
Return reader.ReadToEnd()
Catch ex As Exception
MsgBox("In GetSQL: " & ex.Message)
Throw ex
End Try
End Function
Private Sub ExecuteSql(ByVal DatabaseName As String, ByVal Sql As String)
Dim Command As New SqlClient.SqlCommand(Sql, masterConnection)
' Initialize the connection, open it, and set it to the "master" database
masterConnection.ConnectionString = My.Settings.masterConnectionString
Command.Connection.Open()
Command.Connection.ChangeDatabase(DatabaseName)
Try
Command.ExecuteNonQuery()
Finally
' Closing the connection should be done in a Finally block
Command.Connection.Close()
End Try
End Sub
Protected Sub AddDBTable(ByVal strDBName As String)
Try
' Creates the database.
ExecuteSql("master", "CREATE DATABASE TRIPOLIS") ' + strDBName)
' Creates the tables.
ExecuteSql("TRIPOLIS", GetSql("sql.txt"))
ExecuteSql("TRIPOLIS", GetSql("NuevoUsuario.txt"))
ExecuteSql("TRIPOLIS", GetSql("UsuarioAdmin.txt"))
ExecuteSql("TRIPOLIS", GetSql("ActivarPersonal.txt"))
ExecuteSql("TRIPOLIS", GetSql("ActualizarStock.txt"))
ExecuteSql("TRIPOLIS", GetSql("ActualizarStockDetalleAlmacen.txt"))
ExecuteSql("TRIPOLIS", GetSql("ActualizarStockPedido.txt"))
ExecuteSql("TRIPOLIS", GetSql("ConsultarUsuario.txt"))
ExecuteSql("TRIPOLIS", GetSql("EliminarAlmacen.txt"))
ExecuteSql("TRIPOLIS", GetSql("EliminarCategoria.txt"))
ExecuteSql("TRIPOLIS", GetSql("EliminarCliente.txt"))
ExecuteSql("TRIPOLIS", GetSql("EliminarPersonal.txt"))
ExecuteSql("TRIPOLIS", GetSql("EliminarProducto.txt"))
ExecuteSql("TRIPOLIS", GetSql("EliminarProveedor.txt"))
ExecuteSql("TRIPOLIS", GetSql("EliminarUsuario.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromAlmacen.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromAlmacenByCodigo.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromCategoria.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromCliente.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromDetalleAlmacen.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromDetalleAlmacenByNombre.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromDetalleAlmacenStockMalo.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromDetalleVentaByCodVenta.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromHistoricoAB.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromHistoricoABByCodProd.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromHistoricoABByFecha.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromHistoricoByCodProd.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromHistoricoByFecha.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromHistoricoDetallePedido.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromHistoricoIngresoPedidoByFecha.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromHistoricoIngresoPedidoByRaz_Soc.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromHistoricoTransferencia.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromPedido.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromPedidoByFecha.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromPedidoByNombPers.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromPersonal.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromProducto.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromProveedor.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromUsuarios.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromUsuariosByNombre.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromVenta.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromVentaByFecha.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetAllFromVentasByNombPers.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromCategoriaByNombre.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromCategoriaByUbic.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromClienteByNombre.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromPedidoByFechasNoIngresado.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromPedidosByNombPersNoActivados.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromPersonalByDescNoActivados.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromPersonalByDni.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromProductoByAlmacen.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromProductoByNombre.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetFromProveedorByNombre.txt"))
ExecuteSql("TRIPOLIS", GetSql("GetProductosFromAlmacen.txt"))
ExecuteSql("TRIPOLIS", GetSql("IngresarPedido.txt"))
ExecuteSql("TRIPOLIS", GetSql("pa_buscarCliente.txt"))
ExecuteSql("TRIPOLIS", GetSql("pa_buscarPersonal.txt"))
ExecuteSql("TRIPOLIS", GetSql("pa_modificarCliente.txt"))
ExecuteSql("TRIPOLIS", GetSql("ReducirStockOrigen.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistarProducto.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarAlmacen.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarCategoria.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarCliente.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarDetallePedido.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarDetPedido.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarDetVenta.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarEditarUsuario.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarHistorico.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarHistorico_AB.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarHistoricoIngPedido.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarNuevoProductoEnAlmacen.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarPedido.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarPersonal.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarProveedor.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarStockIngreso.txt"))
ExecuteSql("TRIPOLIS", GetSql("RegistrarVenta.txt"))
ExecuteSql("TRIPOLIS", GetSql("RetornarAlmacenesOrigen.txt"))
ExecuteSql("TRIPOLIS", GetSql("RetornarPedidoNoIngresado.txt"))
ExecuteSql("TRIPOLIS", GetSql("RetornarPersonalSinUsuario.txt"))
ExecuteSql("TRIPOLIS", GetSql("RetornarProductoPedido.txt"))
ExecuteSql("TRIPOLIS", GetSql("RetornarUltimoProducto.txt"))
ExecuteSql("TRIPOLIS", GetSql("ValidarUsuario.txt"))
Catch ex As Exception
' Reports any errors and abort.
MsgBox("In exception handler: " & ex.Message)
Throw ex
End Try
End Sub
Public Overrides Sub Install(
ByVal stateSaver As System.Collections.IDictionary)
MyBase.Install(stateSaver)
AddDBTable(Me.Context.Parameters.Item("dbname"))
End Sub
End Class
-----------------------Clase en C# que no funciona
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Microsoft.VisualBasic;
using System.Xml.Linq;
using System;
using System.Collections;
using System.Linq;
using System.ComponentModel;
using System.Configuration.Install;
using System.IO;
using System.Reflection;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace DBCustomAction
{
public partial class CSDeployInstaller
{
System.Data.SqlClient.SqlConnection masterConnection = new System.Data.SqlClient.SqlConnection();
public CSDeployInstaller()
{
//El Diseñador de componentes requiere esta llamada.
InitializeComponent();
//Agregue el código de inicialización después de llamar a InitializeComponent
}
private string GetSql(string Name)
{
try
{
// Gets the current assembly.
Assembly Asm = Assembly.GetExecutingAssembly();
// Resources are named using a fully qualified name.
Stream strm = Asm.GetManifestResourceStream((string) (Asm.GetName().Name + "." + Name));
// Reads the contents of the embedded file.
StreamReader reader = new StreamReader(strm);
return reader.ReadToEnd();
}
catch (Exception ex)
{
MessageBox.Show("In GetSQL: " + ex.Message);
throw (ex);
}
}
private void ExecuteSql(string DatabaseName, string Sql)
{
System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql, masterConnection);
// Initialize the connection, open it, and set it to the "master" database
masterConnection.ConnectionString = (string) My.Settings.Default.masterConnectionString;
Command.Connection.Open();
Command.Connection.ChangeDatabase(DatabaseName);
try
{
Command.ExecuteNonQuery();
}
finally
{
// Closing the connection should be done in a Finally block
Command.Connection.Close();
}
}
protected void AddDBTable(string strDBName)
{
try
{
// Creates the database.
ExecuteSql("master", "CREATE DATABASE Tripolis"); // + strDBName)
// Creates the tables.
ExecuteSql("Tripolis", GetSql("sql.txt"));
ExecuteSql("Tripolis", GetSql("NuevoUsuario.txt"));
ExecuteSql("Tripolis", GetSql("UsuarioAdmin.txt"));
ExecuteSql("Tripolis", GetSql("ActivarPersonal.txt"));
ExecuteSql("Tripolis", GetSql("ActualizarStock.txt"));
ExecuteSql("Tripolis", GetSql("ActualizarStockDetalleAlmacen.txt"));
ExecuteSql("Tripolis", GetSql("ActualizarStockPedido.txt"));
ExecuteSql("Tripolis", GetSql("ConsultarUsuario.txt"));
ExecuteSql("Tripolis", GetSql("EliminarAlmacen.txt"));
ExecuteSql("Tripolis", GetSql("EliminarCategoria.txt"));
ExecuteSql("Tripolis", GetSql("EliminarCliente.txt"));
ExecuteSql("Tripolis", GetSql("EliminarPersonal.txt"));
ExecuteSql("Tripolis", GetSql("EliminarProducto.txt"));
ExecuteSql("Tripolis", GetSql("EliminarProveedor.txt"));
ExecuteSql("Tripolis", GetSql("EliminarUsuario.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromAlmacen.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromAlmacenByCodigo.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromCategoria.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromCliente.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromDetalleAlmacen.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromDetalleAlmacenByNombre.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromDetalleAlmacenStockMalo.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromDetalleVentaByCodVenta.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromHistoricoAB.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromHistoricoABByCodProd.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromHistoricoABByFecha.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromHistoricoByCodProd.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromHistoricoByFecha.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromHistoricoDetallePedido.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromHistoricoIngresoPedidoByFecha.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromHistoricoIngresoPedidoByRaz_Soc.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromHistoricoTransferencia.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromPedido.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromPedidoByFecha.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromPedidoByNombPers.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromPersonal.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromProducto.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromProveedor.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromUsuarios.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromUsuariosByNombre.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromVenta.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromVentaByFecha.txt"));
ExecuteSql("Tripolis", GetSql("GetAllFromVentasByNombPers.txt"));
ExecuteSql("Tripolis", GetSql("GetFromCategoriaByNombre.txt"));
ExecuteSql("Tripolis", GetSql("GetFromCategoriaByUbic.txt"));
ExecuteSql("Tripolis", GetSql("GetFromClienteByNombre.txt"));
ExecuteSql("Tripolis", GetSql("GetFromPedidoByFechasNoIngresado.txt"));
ExecuteSql("Tripolis", GetSql("GetFromPedidosByNombPersNoActivados.txt"));
ExecuteSql("Tripolis", GetSql("GetFromPersonalByDescNoActivados.txt"));
ExecuteSql("Tripolis", GetSql("GetFromPersonalByDni.txt"));
ExecuteSql("Tripolis", GetSql("GetFromProductoByAlmacen.txt"));
ExecuteSql("Tripolis", GetSql("GetFromProductoByNombre.txt"));
ExecuteSql("Tripolis", GetSql("GetFromProveedorByNombre.txt"));
ExecuteSql("Tripolis", GetSql("GetProductosFromAlmacen.txt"));
ExecuteSql("Tripolis", GetSql("IngresarPedido.txt"));
ExecuteSql("Tripolis", GetSql("pa_buscarCliente.txt"));
ExecuteSql("Tripolis", GetSql("pa_buscarPersonal.txt"));
ExecuteSql("Tripolis", GetSql("pa_modificarCliente.txt"));
ExecuteSql("Tripolis", GetSql("ReducirStockOrigen.txt"));
ExecuteSql("Tripolis", GetSql("RegistarProducto.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarAlmacen.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarCategoria.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarCliente.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarDetallePedido.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarDetPedido.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarDetVenta.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarEditarUsuario.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarHistorico.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarHistorico_AB.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarHistoricoIngPedido.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarNuevoProductoEnAlmacen.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarPedido.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarPersonal.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarProveedor.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarStockIngreso.txt"));
ExecuteSql("Tripolis", GetSql("RegistrarVenta.txt"));
ExecuteSql("Tripolis", GetSql("RetornarAlmacenesOrigen.txt"));
ExecuteSql("Tripolis", GetSql("RetornarPedidoNoIngresado.txt"));
ExecuteSql("Tripolis", GetSql("RetornarPersonalSinUsuario.txt"));
ExecuteSql("Tripolis", GetSql("RetornarProductoPedido.txt"));
ExecuteSql("Tripolis", GetSql("RetornarUltimoProducto.txt"));
ExecuteSql("Tripolis", GetSql("UsuarioAdmin.txt"));
ExecuteSql("Tripolis", GetSql("ValidarUsuario.txt"));
}
catch (Exception ex)
{
// Reports any errors and abort.
MessageBox.Show("In exception handler: " + ex.Message);
throw (ex);
}
}
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
AddDBTable(this.Context.Parameters["dbname"]);
}
}
}