Ir para conteúdo
Fórum Script Brasil
  • 0

DLL C#


Marcos-rj

Pergunta

Boa tarde amigos!

Criei uma DLL C# e fiz as configurações necessárias para ficar visivel no registro de componentes e poder ser consumida pelo ASP clássico...

Criei 3 métodos nessa DLL:

public int Calculo(int a, int b)
public string strMensagem(string texto)
public DataSet RetornaDados(string strSql)
No 1º meto faz um cálculo e retorna o valor, no 2º somente retorna a string passada e no terceiro preciso que retorne uma consulta na base de dados. To tentando fazer o retorno no ASP assim:
Set Listar = CreateObject("dllok.ComPlusClass")
Set Listar1 = Listar.RetornaDados("SELECT TOP 50 NomClasseCertif ,Sig_Oc FROM classe_c WHERE Sig_Oc is not null")
E faço o loop
Do While not Listar1.EOF
Response.Write Listar1("NomClasseCertif")
Listar1.MoveNext
Loop
Erro:
Erro de tempo de execução do Microsoft VBScript (0x800A01A8) Objeto necessário /teste.asp, line 31
Linha 31: Do While not Listar1.EOF É como se não criasse o objeto. alguém da uma ajuda aí? Obrigado O código da minha DLL
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.EnterpriseServices;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;

[assembly: ApplicationName("_DLLTeste")]
[assembly: Description("ComPlus Assmebly")]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationAccessControl(false)]

namespace dllok
{

    #region iInterface

    public interface iCldllok
    {
        int Calculo(int a, int b);
        string strMensagem(string texto);
        DataSet RetornaDados(string strSql);
    }

    #endregion

    [EventTrackingEnabled(true)]

    public class ComPlusClass : ServicedComponent, iCldllok
    {
        //private string connectionString = "Data Source=RDES01S;Initial Catalog=PRODUTOS_RWEB;User Id=MIMONTREAL;Password=MIDESENV;";
        private string connectionString = "Provider=SQLOLEDB;Data Source=RDES01S;Initial Catalog=PRODUTOS_RWEB;User Id=mimontreal;Password=midesenv;";

        public int Calculo(int a, int b)
        {
            try
            {
                return a * b;
            }
            catch
            {
                return 0;
            }
        }

        public string strMensagem(string texto)
        {
            return texto;
        }

        public DataSet RetornaDados(string strSql)
        {
            OleDbConnection conn = new OleDbConnection(connectionString);
            OleDbDataAdapter adp = new OleDbDataAdapter(strSql, conn);
            DataSet ds = new DataSet();
            adp.Fill(ds);
            conn.Close();
            return ds;

        }
    }
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

tentei aqui e nada!

no ASP:

Set Listar = CreateObject("dllok.ComPlusClass")
Metodos OK:
Response.Write Listar.strMensagem("Testando...Marcos")&"<br><br>"

Response.Write FormatCurrency(Listar.calculo(530,20))&"<br><br>"

O 3º metodo:

Set Listar1 = Listar.RetornaDados("SELECT TOP 50 NomClasseCertif ,Sig_Oc FROM classe_c WHERE Sig_Oc is not null")
response.write Listar1

Dessa maneira retorna o erro:

Objeto Response, ASP 0106 (0x80020005)

Um tipo de dados não identificado foi encontrado.

se tento fazer um loop:

Do While not Listar1.EOF

Response.Write Listar1("NomClasseCertif")

Listar1.MoveNext

Loop

retorna o Erro:
Erro de tempo de execução do Microsoft VBScript (0x800A01A8)

Objeto necessário

/teste.asp, line 29

Mas o objeto já foi criado la em cima "Set Listar1 = ..."

Este problema pode ser por causa dos dados retornados, o formato, um dataset c# ?

Link para o comentário
Compartilhar em outros sites

  • 0

Marcos, é preciso abrir a conexão com o banco na sua DLL.

public DataSet RetornaDados(string strSql)
        {
            OleDbConnection conn = new OleDbConnection(connectionString);
            OleDbDataAdapter adp = new OleDbDataAdapter(strSql, conn);

                        conn.Open(); // Está faltando abrir a conexão com o banco

            DataSet ds = new DataSet();
            adp.Fill(ds);
            conn.Close();
            return ds;

        }

Link para o comentário
Compartilhar em outros sites

  • 0

Eu fiz isso, quando postei a segunda resposta. estou tentando refazer aqui, de uma outra maneira. sem usar o DataSet.

Marcos, é preciso abrir a conexão com o banco na sua DLL.

public DataSet RetornaDados(string strSql)
        {
            OleDbConnection conn = new OleDbConnection(connectionString);
            OleDbDataAdapter adp = new OleDbDataAdapter(strSql, conn);

                        conn.Open(); // Está faltando abrir a conexão com o banco

            DataSet ds = new DataSet();
            adp.Fill(ds);
            conn.Close();
            return ds;

        }

Link para o comentário
Compartilhar em outros sites

  • 0

Não entendi muito bem sua segunda e terceira respostas.

"Mas o objeto já foi criado la em cima "Set Listar1 = ..."

Este problema pode ser por causa dos dados retornados, o formato, um dataset c# ?"

A instância do seu método RetornaDados foi feita normalmente. O problema é que quando você manda executar, ao acessar o método, não encontra a conexão com o banco. Como sua DLL está sem tratamento de exceções (try/catch), não dá pra saber exatamente onde está o erro.

"Eu fiz isso, quando postei a segunda resposta. estou tentando refazer aqui, de uma outra maneira. sem usar o DataSet."

Não entendi. :huh:

Editado por Xistyle
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...