| Últimas 20 atualizações de AGNALDO DIOGO DOS SANTOS |
|
|
originalmente publicado em http://50minutos.com.br/blog
Definição:
É o pattern que diminui o consumo de memória ao compartilhar dados entre objetos similares. Normalmente é usado com coleções pequenas de objetos.
Quando usar:
- Quando você tem muitos objetos em memória;
- Quando você pode compartilhar estado entre objetos;
- Quando você quer economizar memória.

Como usar:
- Criar as classes Flyweight, que implementam IFlyweight;
- Criar uma class FlyweightFactory, que possui uma coleção de IFlyweight;
- Implementar as operações (Operation);
- Criar um construtor que inicialize a coleção de IFlyweight.
Exemplo: using System;
using System.Collections.Generic;
namespace _50minutos_flyweight
{
class Program
{
static void Main(string[] args)
{
Sanduiches lista = new Sanduiches();
Console.WriteLine("Pedido: {0}", lista[1]);
Console.WriteLine("Pedido: {0}", lista[3]);
Console.WriteLine("Pedido: {0}", lista[3]);
Console.WriteLine("Pedido: {0}", lista[2]);
Console.WriteLine("Pedido: {0}", lista[1]);
Console.WriteLine("Pedido: {0}", lista[4]);
Console.ReadKey();
}
}
//IFlyweight
public interface ISanduiche
{
double Preco { get; }
}
public abstract class Sanduiche : ISanduiche
{
public abstract double Preco { get; }
public override string
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
originalmente publicado em http://50minutos.com.br/blog
No post Um pattern em C# por dia: Façade - pattern estrutural eu mostrei um exemplo. Aqui vai mais um:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using _50minutos_biblioteca;
using System.Threading;
namespace _50minutos_facade
{
class Program
{
static void Main(string[] args)
{
Sala s = new Sala();
s.Abrir();
Console.WriteLine("------------------------");
Console.WriteLine("a aula está em andamento");
Console.WriteLine(" a g u a r d e . . .");
Console.WriteLine("------------------------");
Thread.Sleep(5000);
s.Fechar();
Console.ReadKey();
}
}
}
//Library
namespace _50minutos_biblioteca
{
//SubsystemA
internal class SalaTreinamento
{
internal void AcenderLuzes()
{
Console.WriteLine("sala de treinamento - luzes acesas");
}
internal void ApagarLuzes
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
originalmente publicado em http://50minutos.com.br/blog
Definição:
É um padrão que cria uma interface simples, de alto nível, para interfaces complexas. Com isso a visão do usuário é de que a operação é simples, quando - na verdade - não o é.
Quando usar:
- Quando você tem uma biblioteca definida e apartada da aplicação client e não quer que a mesma acesse recursos específicos dentro dela;
- Quando você precisa simplificar uma sequência de passos mais complexa;
- Quando você quer ter diferentes interfaces com o usuário;
- Quando você precisa de um novo ponto de acesso a um recurso de um software em camadas.

Como usar:
- Criar uma classe static Facade;
- Criar campos estáticos do tipo de cada Subsystem de Library;
- Implementar as operações (Operation1, Operation2) de modo que ele execute métodos dos subsistemas (SubsystemA, SubsystemB e SubsystemC).
Exemplo: using System;
using _50minutos_biblioteca;
namespace _50minutos_facade
{
class Program
{
static void Main(string[] args)
{
Homem.SacarDinheiro();
Console.ReadKey();
}
}
}
//Library
namespace _50minutos_biblioteca
{
//SubsystemA
internal class Pessoa
{
internal void Ir(String paraOnde)
{
Console.WriteLine("chegou: {0}", paraOnde);
}
internal void PassarCartao()
{
Console.WriteLine("passou o cartão");
}
internal void DigitarSenha()
{
Console.WriteLine("digitou a senha");
}
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
originalmente publicado em http://50minutos.com.br/blog
Definição:
É um padrão que permite que duas interfaces não relacionadas trabalhem em conjunto. O link entre elas é feito pela classe adaptadora.
Quando usar:
- Quando você precisa ter nomes de métodos diferentes (entre os chamados e os executados);
- Quando você quer ter diferentes conjuntos de métodos (para propósitos diferentes);
- Quando quiser criar classes reusáveis.

Como usar: originalmente publicado em http://50minutos.com.br/blog
Definição:
É um padrão que permite que duas interfaces não relacionadas trabalhem em conjunto. O link entre elas é feito pela classe adaptadora.
Quando usar:
- Quando você precisa ter nomes de métodos diferentes (entre os chamados e os executados);
- Quando você quer ter diferentes conjuntos de métodos (para propósitos diferentes);
- Quando quiser criar classes reusáveis.

Como usar:
- Criar uma classe Adapter que implemente Adaptee e ITarget;
- Implementar Request de modo que ele execute SpecificRequest.
Exemplo:
using System;
using System.Threading;
namespace
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
originalmente publicado em http://50minutos.com.br/blog
Definição:
É um padrão que nos permite tratar de forma igual objetos simples e objetos compostos (formados por outros objetos).
Quando usar:
- Quando você tem uma estrutura irregular de objetos simples e compostos (pais e filhos, pastas e arquivos, por exemplo);
- Quando você quer tratar os objetos simples e os compostos da mesma forma.

Como usar:
- Criar uma classe Component que implemente IComponent;
- Criar uma classe Composite que implemente IComponent;
- Adicionar um campo privado (list) do tipo coleção de IComponent;
- Adicionar um construtor que inicialize a coleção;
- Implementar Operation de modo que ele execute Operation de cada elemento de list.
Exemplo:
using System;
using System.Collections.Generic;
namespace _50minutos_composite
{
class Program
{
static void Main(string[] args)
{
IObjeto arq1 = new Arquivo("composite.png");
IObjeto arq2 = new Arquivo("minhaFoto.gif"
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
originalmente publicado em http://50minutos.com.br/blog
Definição:
É um padrão que nos permite separar a implementação da abstração.
Quando usar:
- Quando queremos ocultar do cliente a implementação;
- Quando queremos evitar o vínculo (p.e. herança) entre a abstração e a implementação;
- Quando queremos alterar a implementação sem recompilar a abstração.

Como usar:
- Criar as implementações (ImplementationA e ImplementationB) que implementem Bridge;
- Criar uma classe Abstraction;
- Adicionar um campo privado do tipo Bridge;
- Adicionar um construtor que receba um Bridge e o atribua ao campo privado;
- Implementar Operation de acordo com a sua necessidade, chamando os métodos OperationImp de ImplementationA ou ImplementationB.
Exemplo 01: using System;
namespace _50minutos_bridge { class Program { static void Main(string[] args) { CalculadoraFramework cf; cf = new CalculadoraFramework(); CalculadoraJohnWallis jw; jw = new CalculadoraJohnWallis(); CalculadoraLeibniz lz; lz = new CalculadoraLeibniz();
Console.WriteLine("constante do framework"); Console.WriteLine("\tPI: {0}\n", new Calculadora(cf).PI);
Console.WriteLine("algoritmo de John Wallis"); Console.WriteLine("\tPI: {0}\n", new Calculadora(jw).PI);
Console.WriteLine("algoritmo de Leibniz"); Console.WriteLine("\tPI: {0}\n", new Calculadora(lz).PI);
Console.ReadKey(); } }
//Bridge interface ICalculadora { //OperationImp double PI { get; } }
//ImplementationA class CalculadoraFramework : ICalculadora { //retorna a constante PI da classe Math
//OperationImp public double PI { get { return Math.PI; } } }
//ImplementationB class CalculadoraJohnWallis : ICalculadora { //OperationImp public double PI { get { double pi = 1;
for (int i = 1; i <= 100000; i++) { double numero = i * 2; pi *= numero / (numero - 1); pi *= numero / (numero + 1); }
return 2 * pi; } } }
//ImplementationX class CalculadoraLeibniz : ICalculadora { //OperationImp public double PI {
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
originalmente publicado em http://50minutos.com.br/blog
Definição:
É um padrão que nos permite encapsular a instância de uma classe complexa usando uma instância de outra classe que possui a mesma interface. Com isso podemos controlar a criação e acesso aos objetos complexos usando objetos mais simples.
Quando usar:
- Quando temos uma classe que possua dados sensíveis (que deveriam ser de acesso restrito);
- Quando temos uma classe que acessa objetos remotos;
- Quando temos uma classe em que a criação do objeto é muito demorada.

Como usar:
- Criar uma classe Proxy que implemente ISubject;
- Adicionar um campo privado do tipo Subject;
- Implementar ISubject (Request) de forma que ele chame o método correspondente (Request) da classe Subject (que NÃO herda de ISubject).
Exemplo 01:
using System;
using System.Threading;
namespace _50minutos_proxy
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Sem proxy\n---------\n");
for (int i = 1; i <= 3; i++)
{
Usuario usuario = new Usuario();
Console.WriteLine(usuario.Consultar());
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Usando proxy para controlar a criação");
Console.WriteLine("-------------------------------------");
Console.WriteLine();
IUsuario proxy;
proxy = new ProxyUsuario();
for (int i = 1; i <= 3; i++)
{
Console.WriteLine(proxy.Consultar());
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Definição:
É um padrão que nos permite estender (decorar) dinamicamente as características de uma classe qualquer. Por características entendemos estado (state: campos e propriedades - propriedades somente em .Net) ou comportamento (behavior: métodos).
É uma alternativa à herança e tem uma diferença importante (e que torna o seu uso mais flexível) em relação àquela:
- herança é definida em tempo de compilação;
- uma classe decorada é definida em tempo de execução.
Quando usar:
- Quando temos uma classe que não queremos herdar;
- Quando temos uma classe que não pode ser herdada por ser final - em java -, sealed - em C# - ou NotInheritable - em VB.Net;
- Quando temos uma classe que não pode ser herdada por estarmos herdando de uma outra classe qualquer.

Como usar:
- Criar uma classe Decorator que implemente IComponent;
- Adicionar um campo privado do tipo IComponent;
- Adicionar um construtor que receba um IComponent e o atribua ao campo privado;
- Implementar IComponent (Operation) de acordo com a sua necessidade;
- Criar novos métodos (AddedBehavior) e/ou campos (addedState) e/ou propriedades (addedState) de acordo com a sua necessidade.
Exemplo 01:
using System;
using System.Text;
namespace _50minutos_decorator
{
class Program
{
static void Main(string[] args)
{
Pessoa pessoa;
pessoa = new Pessoa();
Console.WriteLine("usando Pessoa:");
Console.WriteLine(pessoa.Andar());
Console.WriteLine();
PessoaRapida pessoaRapida;
pessoaRapida = new PessoaRapida(pessoa);
Console.WriteLine("usando PessoaRapida:");
Console.WriteLine(pessoaRapida.Andar());
Console.WriteLine(pessoaRapida.Correr());
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
by Agnaldo - publicado em www.50minutos.com.br/blog
Agora que nosso serviço está publicado, vamos arrumar a referência no cliente WPF desenvolvido antes. Clique com o botão direito do mouse sobre a referência Servico e escolha a opção Configure Service Reference...:

Digite o endereço correto do serviço publicado e clique no botão OK, no final da caixa de diálogo: [more]

Aguarde a atualização da referência do serviço:

Execute o programa e veja que funciona corretamente ATÉ QUE ENFIM!!!:

Se você for desconfiado, vá à pasta BIN/DEBUG e acesse o executável. Também funciona claro, lógico, óbvio:

Pronto!!! Acabou. -->">
|
|
|
|
by Agnaldo - publicado em www.50minutos.com.br
Agora que temos o serviço e o cliente prontos e testados, vamos publicar o primeiro no IIS 7 (na verdade estou com o IIS 7.5). Para acessar o gerenciador do IIS, abra o Painel de Controle:

Clique sobre System and Security e, depois, em Administrative Tools: [more]


Clique no ícone Internet Information Services (IIS) Manager:

Você verá que o Default Web Site da sua máquina está em execução:

Para testar e ver se tudo está OK, abra o IE e digite o endereço da sua máquina (http://localhost):

Voltando ao IIS Manager, selecione o Default Web Site no lado esquerdo e pare o serviço clicando em Stop (no menu da direita):

Clique com o botão da direita do mouse sobre o servidor e escolha a opção Add Web Site... no menu de contexto:

Crie o site Calculadora na pasta de sua escolha. Esse site responderá na porta 80 de todos os
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
by Agnaldo - publicado em www.50minutos.com.br
Agora que o serviço já executou, vamos criar um novo projeto, agora do tipo C# Windows, usando o template WPF Application. Dê o nome ExemploWPF:


Crie o layout abaixo, digitando o código que aparece na sequência: [more]

<Window x:Class="ExemploWPF.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Label Grid.Row="0" Grid.Column="0" Content="Número 1:" HorizontalAlignment="Right" VerticalAlignment="Center"/> <
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
by Agnaldo - publicado em www.50minutos.com.br
Crie um projeto C# Web usando o template WCF Service Application. Dê o nome ExemploWCF para o projeto e SolucaoWCF para a solução.


Veja, no Solution Explorer, que já foi criado um serviço (Service1) como exemplo:

Clique com o botão direito do mouse sobre o arquivo IService.cs e, no menu de contexto, escolha Renomear. Mude o nome para ICalculadora.cs. Uma mensagem dizendo que, já que você mudou o nome do arquivo, poderá mudar o nome da interface, e de todas as suas chamadas, automaticamente. Responda Yes.

Abra o arquivo ICalculadora.cs e veja que o nome da interface mudou:

Renomeie o arquivo Service1.svc para Calculadora.svc e repare no código que NÃO É AUTOMÁTICA a troca do nome da classe:

Clique com o botão direito do mouse sobre o nome da classe Service1 e, no menu de contexto, escolha Refactor e Rename...:

Altere o nome para Calculadora e clique em OK:

Clique em Apply na caixa de diálogo Preview changes - Rename, para confirmar a alteração:

Abra o arquivo web.config e substitua (CTRL+H) o texto Service1 (nome antigo da classe) por Calculadora (nome novo):

Clique OK na confirmação:

Abra o arquivo ICalculadora.cs e altere o seu conteúdo para (você está eliminando o código de exemplo que o VS2008 colocou e criando os seus membros):
using System.ServiceModel;
namespace ExemploWCF { [ServiceContract] public interface ICalculadora { [OperationContract] double Somar(double x, double y);
[OperationContract]
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
by Agnaldo - publicado em http://50minutos.com.br/blog
Um colega de trabalho assistiu a uma das minhas palestras sobre Visual Studio 2010 e me pediu para "dar um tapa" num aplicativo WCF que ele estava fazendo - está começando a estudar. Disse que tinha perguntado para algumas pessoas e não tinham resolvido o problema: dá erro ao publicar.
Vou fazer em vários posts:
- Na parte 001 eu vou criar o serviço WCF e executá-lo a partir do VS2008;
- Na parte 002 eu criarei um cliente WPF para consultá-lo, executando do VS2008;
- Na parte 003 eu publicarei o serviço no IIS (Internet Information Services) 7.0 e farei os ajustes necessários no servidor;
- Na parte 004 eu altero o cliente para se comunicar com o serviço publicado e testo a aplicação toda.
-->">
|
|
|
|
Como descompilar um programa escrito em java?
publicado por Agnaldo em 20 de maio de 2008 no www.50minutos.com.br
Pergunta do aluno: Como posso obter o arquivo fonte (.java) a partir de um arquivo binário (.class) em java?
Resposta: Eu uso um programinha chamado Jad. Possui interface console e usamos da seguinte forma:
jad [argumentos] NomeDoArquivo.class
Por exemplo, se quiser descompilar o arquivo Pessoa.class, usamos (na forma mais simples):
jad Pessoa.class (um arquivo Pessoa.jad será criado)
Para obter uma ajuda a respeito dos argumentos permitidos, basta executar:
jad
Existem programas com interface gráfica que chamam o Jad internamente, como o FrontEndPlus (baixado no próprio site do JAD) e o Decafe Pro.
O código fonte original da classe Pessoa (arquivo Pessoa.java) é:
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Passando valores para o HTML com JSObject
publicado em 20 de maio de 2008 por Agnaldo em www.50minutos.com.br
Nesse post mostrei a criação de um applet capaz de alterar valores de um campo de formulário HTML mas não entrei em detalhes como consegui acessar a estrutura da página onde o applet estava.
Um applet não acessa, por padrão, um objeto do container onde ele está inserido. Para suprir essa deficiência (na verdade é uma característica do applet) a Netscape criou a classe JSObject, pertencente ao pacote (package) netscape.javascript.
Essa classe deriva diretamente de java.lang.Object e sua declaração é:
public final class JSObject extends Object
Os principais métodos da classe são:
- call(String, Object[]) - executa um método JavaScript;
- eval(String) - avalia uma expressão JavaScript;
- finalize() - remove a referência do objeto no objeto JavaScript correspondente;
- getMember(String) - retorna um objeto do JavaScript, acessado pelo nome. É equivalente ao this.name;
- getSlot(int) - retorna um objeto do JavaScript, acessado pelo índice. É equivalente ao this[index];
- removeMember(String) - remove um objeto do JavaScript, acessado pelo nome;
- setMember(String, Object) - Atribui um valor a um objeto do JavaScript, acessado pelo nome. Equivale ao this.name = value;
- setSlot(int, Object) - Atribui um valor a um objeto do JavaScript, acessado pelo índice. Equivale ao this[index] = value;
- toString() - retorna a representação do objeto em forma de Strin
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
ADO.NET 2.0 - classe DataSet
Iniciei o assunto nesse post. Aqui falei sobre a classe Connection e aqui sobre a classe ConnectionStringBuilder. Agora é a vez do DataSet.
Um objeto da classe DataSet mantém um conjunto de dados em memória. Esses dados podem vir de uma consulta a uma base de dados, leitura de um XML, etc.
Devemos importar o namespace adequado para usar a classe DataSet (os exemplos desse post serão todos baseados no Microsoft SQL Server 2005 Express Edition - a versão grátis):
Visual Basic
C#
A declaração da classe DataSet é:
Visual Basic
<SerializableAttribute> Public Class DataSet Inherits MarshalByValueComponent Implements IListSource, IXmlSerializable, _ ISupportInitializeNotification, ISupportInitialize, _ ISerializable
C#
[SerializableAttribute] public class DataSet : MarshalByValueComponent, IListSource, IXmlSerializable, ISupportInitialize
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
ADO.NET 2.0 - classe ConnectionStringBuilder e strings de conexão
publicado em 15 de maio de 2008 por agnaldo em www.50minutos.com.br
Iniciei o assunto nesse post. Aqui falei sobre a classe Connection. Agora é a vez de falar sobre strings de conexão.
Precisamos fornecer alguns dados (na forma de uma string de conexão) ao objeto de conexão (instância da classe xxxConnection) para que nosso programa faça acesso a uma base de dados.
Nesse site vemos diversas strings de conexão.
Os principais argumentos de uma (string de conexão) connection string são:
- Data Source ou Server - nome ou endereço IP da máquina onde o SGBD está sendo executado. Se for uma instância nomeada, devemos fornecer seu nome também;
- Initial Catalog ou Database - nome do database;
- User ID ou Uid - usuário usado para conexão;
- Password ou Pwd - senha do usuário;
- Integrated Security ou Trusted_Connection - false se estiver informando usuário e senha ou true se a autenticação for integrada com o sistema operacional. Podemos usar SSPI em vez de true;
- User Instance - false se o database for vinculado a uma instância do SQL Server ou true se for um arquivo de dados (instância de usuário);
- AttachDbFilename - endereço do arquivo de dados do SQL Server que será usado.
Exemplos de strings de conexão:
- SQL Server - Data Source=NOTEBOOK;Initial Catalog=MASTER;User Id=usuarioSQL;Password=senhaSQL;
- SQL Server - Data Source=.\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\BANCO.mdf;User Instance=true;
- SQL Server (OLEDB) - Provider=SQLNCLI;Data Sourc
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
ADO.NET 2.0 - classe Connection
publicado em 15 de maio de 2008 por agnaldo em www.50minutos.com.br
No post anterior escrevi uma breve introdução ao ADO.NET 2.0. Neste post veremos a classe Connection, que estabelece uma conexão com o banco de dados.
Para termos o melhor desempenho possível, essa classe é desenvolvida para cada banco.
Deriva da classe DbConnection (namespace System.Data.Common) e da interface ICloneable (namespace System).
Algumas classes Connection são:
- SqlConnection (namespace System.Data.SqlClient) - para conexão ao Microsoft SQL Server;
- OleDbConnection (namespace System.Data.OleDb) - para conexão a qualquer banco de dados que suporte o padrão OleDB, como Microsoft Sql Server 7.0, Microsoft Access;
- OracleConnection (namespace System.Data.OracleClient) - para conexão ao Oracle.
Devemos importar o namespace adequado para usar a classe SqlConnection (os exemplos desse post serão todos baseados no Microsoft SQL Server 2005 Express Edition - a versão grátis):
Visual Basic Imports System.Data.SqlClient
C# using System.Data.SqlClient;
A sintaxe da classe SqlConnection é:
Visual Basic Public NotInheritable Class SqlConnection _ Inherits DbConnection _ Implements ICloneable
C# public sealed class SqlConnection : DbConnection, ICloneable
Os principais membros da classe SqlConnection são:
- Propriedades:
- ConnectionString - String que possui os dados do SGBD, como nome do servidor, instância, banco, usuário, senha e tipo de autenticação, dentre outros;
- DataSource - Retorna o nome da instância do SQL Server;
- Database - Retorna o nome do banco de dados;
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
ADO.NET 2.0 - Introdução
postado em: 14 de maio de 2008 por agnaldo em www.50minutos.com.br

O ADO.NET é um conjunto classes pertencente à plataforma .NET que tem por função prover acesso a dados aos programas escritos em linguagens da plataforma (C#, VB.NET, Cobol, etc).
Seus principais namespaces são:
- System.Data.Common - classes e interfaces genéricas de acesso a dados;
- System.Data - classes que não são específicas de um determinado software gerenciador de banco de dados (SGBD), como o SQL Server, Oracle ou MySQL;
- System.Data.SqlClient - classes específicas para acesso ao Microsoft SQL Server 7.0, 2000 e 2005;
- System.Data.OleDb - classes específicas para acesso a qualquer fonte OLE DB, como Access e versões mais antigas do Microsoft SQL Server (como a 6.5);
- System.Data.OracleClient - classes específicas para acesso ao Oracle Database Server;
- System.Data.SqlTypes - classes que representam os datatypes do Microsoft SQL Server 2005;
- System.Data.Sql - classes para uso em integração com CLR.
Quanto à forma de acesso aos dados temos dois modelos:
- conectado - uma conexão (vínculo do programa com o SGBD) é mantida ativa enquanto trabalhamos (percorrendo os itens para impressão na tela, por exemplo). Esse modelo é indicado para tarefas como preencher um ComboBox (DropDownList no ASP.NET);
- desconectado - uma conexão é aberta, os dados são pesquisados e depois a conexão é fechada. Somente nesse momento é que se manipulam os dados. É indicado para preencher
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Problema do aluno: Uma dll escrita em VB.Net pode ser usada no Visual Basic 6?
Solução: Pode sim. Basta configurar o projeto corretamente.
Crie um projeto do tipo class library chamado ExemploDLL no Visual Studio 2005. Como linguagem escolha o VB.Net. No menu lateral Solution Explorer dê um duplo clique em My Project.

Na tela que se abre, acesse a aba lateral Compile e cheque a opção Register for COM Interop.

Abra o arquivo Class1.vb e crie um método, como abaixo (copiei o código completo para evitar confusão): Public Class ClasseNet Public Function MeuNome() As String Return "AGNALDO" End Function End Class
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
| |
|