Jump to content
Fórum Script Brasil
  • 0

DLL C#


Question

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 to post
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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:

Edited by Xistyle
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148980
    • Total Posts
      645041
×
×
  • Create New...