none
Conexão com sql 2005 através de uma DLL COM+ em C# RRS feed

  • Pergunta

  • E aí pessoal,

    Eu tenho uma DLL feita em C# para conectar com um banco de dados SQL 2005, que está registrada como um aplicativo COM+ e consumo ela no asp clássico. O intuito dessa DLL é somente ocultar a string de conexão com a senha, usuario, etc.

    Nessa DLL utilizo ADODB.Connection e ADODB.RecordSet e retorno para o ASP clássico os objetos para poder trabalha-los de lá.

    Essa DLL está funcionando corretamente, com ela eu consigo abrir um recordSet, conectar com o banco, rodar query, etc.

    O problema é o seguinte, há um pouco de lentidão quando conecto por ela, há relatorios maiores que funcionavam normalmente antes de usar essa DLL, mas com ela fica tão lento que esses relatorios maiores acabam excedendo o limite de tempo de execução de script do ASP.

    Alguém tem alguma idéia do que fazer para melhorar o desempenho de um aplicativo COM+ de conexão com banco de dados?
    David
    quinta-feira, 26 de fevereiro de 2009 18:45

Todas as Respostas

  • Tem como vc passar os métodos de conexão da DLL ??


    Nelson Borges - Analista de Sistemas
    domingo, 1 de março de 2009 04:04
  • segue o codigo fonte da dll, tipo eu uso o ADODB ao inves ADO.net por causa que eu retorno para o asp classico


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.EnterpriseServices;
    using System.Data.SqlClient;
    using ADODB;
    using System.Threading;

    [assembly: ApplicationName("Wx7Conexao")]
    [
    assembly: Description("Conexao com dados para banco da Forma Turismo com COM+")]
    [
    assembly: ApplicationActivation(ActivationOption.Server)]
    [
    assembly: ApplicationAccessControl(false, AccessChecksLevel = AccessChecksLevelOption.ApplicationComponent)]

    namespace
    Wx7
    {
        public class Conexao : ServicedComponent
        {
            //Declaracao dos objetos, variaveis
            private ADODB.Command CMD = new ADODB.Command();
            private ADODB.Connection DB = new ADODB.Connection();
            private ADODB.Recordset RS = new ADODB.Recordset();
            private String connectionString = "";
            private String dataSourceVC = "";
            private String initialCatalogVC = "";
            private String passwordVC = "";
            private String userIdVC = "";

            //seleciona os dados do ambiente dependendo do ambiente solicitado (eu apaguei o case que define as variaveis no codigo aqui) **************** ****************** ******* ******** *****
            public String selecionaDadosSQL(String ambienteVC)
            {

                    initialCatalogVC = "banco";
                    userIdVC =
    "usuario";
                    passwordVC =
    "senha";
                    dataSourceVC =
    "banco";
                

                return "Initial Catalog=" + initialCatalogVC + "; Data Source=" + dataSourceVC + "; Provider=SQLOLEDB.1; Persist Security Info=True; User ID=" + userIdVC + "; Password=" + passwordVC + ";";

            }

            //abre a conexao com o banco de dados ******** ********* ********** ******** ******* *******

            public ADODB.Connection openConnection(String ambienteVC)
            {
                connectionString = selecionaDadosSQL(ambienteVC);
                this.DB.Open(connectionString, this.userIdVC, this.passwordVC, 0);
                return this.DB;
            }

            //cria o record set com o activeConnecion definido ****** ******** ******** ******* *******
            public ADODB.Recordset createRecordSet(String ambienteVC) 
            {
                connectionString = selecionaDadosSQL(ambienteVC);
                this.RS.let_ActiveConnection(connectionString);
                return this.RS;
            }

            //cria o command do ADODB com o active connection definido ******* ******** ******* ******

            public ADODB.Command createCommand(String ambienteVC)
            {
                connectionString = selecionaDadosSQL(ambienteVC);
                this.CMD.let_ActiveConnection(connectionString);
                clearParameters(CMD);
                return this.CMD;
            }

            //fecha a conexao com o banco de dados ********* ********** ********** ********* ****** ****

            public void closeConnection()
            {
                this.DB.Close();
            }

            //limpa possiveis parametros **** ******** ************ *********** ******** ******* ********
            public void clearParameters(ADODB.Command CMD) 
            {
                while (CMD.Parameters.Count > 0)
                {
                    CMD.Parameters.Delete(0);
                }
            }

            //destrutor **** ******** ************ *********** ******** ******* ********
            ~Conexao ()
            {
                this.Dispose();
            }

            public
    void Dispose()
            {
                GC.SuppressFinalize(this);
            }

        }

    }

    espero retorno

    valeu!


    David
    segunda-feira, 2 de março de 2009 12:36