09
Nov
09

Instalando o Reporting Services 2005 – Windows 2003 Server

E ai pessoas!

Cumprido minha promessa do artigo sobre a instalação do SSRS 2005 no Windows Seven e Vista, vou mostrar como se realiza a instalação do SSRS 2005 em um servidor, no caso o Windows Server 2003 e 2003 R2.

Esta instalação é parecida com a instalação do SSRS no Windows XP, assim como no Vista é semelhante ao do Windows Server 2008.

Primeiro, lembremos do maldito “Warning” (IIS Feature Requirement) que nos persegue na instalação do SQL Server 2005. Por causa deste “Warning”, o serviço do SQL Server Reporting Services (SSRS) não instala. Então vamos resolver este pequeno problema!

Para a felicidade de alguns que trabalham com versões mais atuais, isso não ocorre no SQL Server 2008 e 2008 R2, que têm o SSRS como um serviço independente do IIS.

Cancele a instalação do SQL Server 2005 e vamos para o “Painel de Controle\Adicionar e Remover Programas”:

No terceiro item do menu da esquerda, temos a opção de Adicionar/Remover Componentes do Windows:

Nesta opção, teremos o item de “Servidor de Aplicações” ou “Application Server”, habilite este item e mantendo ele selecionado, clique no botão “Detalhes” ou “Details…”:

Agora temos alguns configurações relacionadas ao nosso servidor de aplicações, visto que o SSRS é uma Aplicação Web (ASP.NET), precisaremos dos seguintes itens selecionados:

No caso do IIS, a instalação padrão dele já supri nossas necessidades.

Depois recomeçamos a instalação do SQL Server e os “Warning”s que bloqueiam a instalação do SSRS não estão mais lá. (Só uma observação sobre minha instalação, é que outro “Warning” aparece, pois a VM tem a mínima configuração necessária para instalar o SQL Server.) Muitos dos outros “Warnings” são resolvidos pela atualização do Windows. (No exemplo, estou utilizando uma instalação do Windows 2003 R2 SP2, com todas as atualizações até Agosto de 2009)

Pronto, agora é só selecionar o “Reporting Services” e prosseguir com a instalação:

Lembrei de outra configuração na instalação do SQL Server que se refere ao SSRS, é sobre as opções de como ele será instalado, no caso a instalação “Default”, já suprirá as configurações de um servidor convencional. (Caso precise de uma configuração diferente, estou elaborando um artigo sobre a gerenciamento e configurações do SSRS 2005/2008. Mas na urgência, dê uma olhada na biblioteca de SQL Server 2005, no site do MSDN)

E por fim a tela que muitos sonham encontrar, quando começam a instalação do SQL Server 2005.

Então pessoal, creio que com estes dois artigos vocês já estarão bem informados sobre como instalar o SSRS 2005, mas qualquer dúvida fiquem a vontade em perguntar! Tenham uma ótima semana!

Artigos relacionados:

Instalando o SQL Server Reporting Server (Windows Vista, Seven e 2008)

07
Nov
09

ADO.NET: DataReader e Transações

Neste artigo trabalharei dois outros objetos muito importantes no ADO.Net, o DataReader e o Transaction, responsáveis pela leitura de dados no banco e pela ACID (Atomicidade, Consistência, Isolamento, Durabilidade) na manipulação de dados repectivamente.

Quando se espera o resultado de uma consulta SQL com mais de uma célula, pode ser utilizado objetos DataReader como forma de executar uma consulta no banco de dados retornando gradualmente o resultado, mantendo a conexão com o banco de dados até que a conexão seja encerrada.

DataReader: Recomendado em situações onde há a necessidade de ler o resultado de uma consulta. Abaixo dois exemplos típicos de como realizar consultas com o DataReader:

//Consulta de várias linhas.
Dictionary<int, string> dic = new Dictionary<int, string>();
string queryString = "SELECT id, nome FROM pessoa";
using (SqlConnection connection = new SqlConnection(connectionString))
{
  connection.Open();
  SqlCommand command = new SqlCommand(queryString, connection);
  using (SqlDataReader reader = command.ExecuteReader())
  {
    while (reader.Read())
    {
      dic.Add((int)reader[0], (string)reader[1]);
    }
  }
}
return dic;
//Consulta de uma única linha
string result = string.Empty;
string queryString = "SELECT id, nome FROM pessoa";
using (SqlConnection connection = new SqlConnection(connectionString))
{
  connection.Open();
  SqlCommand command = new SqlCommand(queryString, connection);
  using (SqlDataReader reader = command.ExecuteReader())
  {
    if (reader.Read())
    {
      result = String.Format("{0} - {1}", reader[0], reader[1]));
    }
  }
}
return result;

Visto a dependência da conexão com o banco de dados, o DataReader pode ser adaptado para fechar a conexão automaticamente ao finalizar a leitura, utilizando “CommandBehavior.CloseConnection”.

//Consulta de uma única linha
string queryString = "SELECT id, nome FROM pessoa";
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlCommand command = new SqlCommand(queryString, connection);
return command.ExecuteReader(CommandBehavior.CloseConnection);

O DataReader pode retornar mais de uma consulta, que pode ser acessada facilmente com o método NextResult:

//Consulta de várias linhas
Dictionary<int, string> dic = new Dictionary<int, string>();
string queryString = "SELECT id, nome FROM pessoa1;\n"
  + "SELECT id, nome FROM pessoa2;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
  connection.Open();
  SqlCommand command = new SqlCommand(queryString, connection);
  using (SqlDataReader reader = command.ExecuteReader())
  {
    while (reader.Read())
    {
      dic.Add((int)reader[0], (string)reader[1]);}
      reader.NextResult();
      while (reader.Read())
      {
        dic.Add((int)reader[0], (string)reader[1]);
      }
    }
  }
}
return dic;

ou

//Consulta de várias linhas
Dictionary<int, string> dic = new Dictionary<int, string>();
string queryString = "SELECT id, nome FROM pessoa1;\n"
  + "SELECT id, nome FROM pessoa2;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
  connection.Open();
  SqlCommand command = new SqlCommand(queryString, connection);
  using (SqlDataReader reader = command.ExecuteReader())
  {
    do
    {
      while (reader.Read())
      {
        dic.Add((int)reader[0], (string)reader[1]);
      }
    } while(reader.NextResult());
  }
}
return dic;

Transaction: Para situações onde é necessário inserir ou alterar muitos registros no banco de dados de uma só vez e desfazer estas inserções ou alterações caso ocorra algum erro, é recomendado o uso de transação (Transaction).

Conforme o exemplo abaixo, é aberta uma conexão e criada uma transação pelo método “BeginTransaction”. Dentro da transação são executados dois métodos de inserção, caso algum deles dê erro será executado o método “RollBack” que desfará as inserções no banco de dados. Caso não haja erro, será necessário executar o método “Commit” para que as inserções tenham efeito.

using (SqlConnection connection = new SqlConnection(connectionString))
{
  connection.Open();
  using (SqlTransaction transaction = connection.BeginTransaction())
  {
    SqlCommand command = connection.CreateCommand();
    command.Connection = connection;
    command.Transaction = transaction;
    try
    {
      command.CommandText = "INSERT INTO tabela VALUES ('valor')";
      command.ExecuteNonQuery();
      command.CommandText = "INSERT INTO tabela VALUES ('valor')";
      command.ExecuteNonQuery();
      transaction.Commit();
    }
    catch
    {
      transaction.Rollback();
    }
  }
}

Transações não possuem “segredo”, são simples de serem utilizadas, mas em compensação, a execução dos comandos SQL podem demorar um pouco mais, afim de garantir atomicidade, consistência, isolamento, durabilidade do que esta sendo executado. Mas não se preocupe com situações simples, como a execução de um único comando de delete, insert ou update, pois o SQL Server possui transações implícitas nestes comandos, para evitar situações como alterar, deletar ou inserir “pela metade”.

31
Out
09

ADO.NET: Introdução

Com o advento Framework.Net, se possibilitou novos recursos de acessos a dados, de forma a facilitar do desenvolvimento até migração entre plataformas de SGDB.

O ADO.Net, principal recurso de acesso a banco de dados na plataforma .Net, se popularizou por sua arquitetura orientada a objeto e o suporte as principais plataforma de SGDB do mercado, como Oracle e SQL Server, além de suporte a OleDb e ODBC, que possibilitam a integração com Excel, DB2, Interbase, PostGree, Firebird e MySQL, sem a necessidade de utilizar qualquer componente de terceiros.

Também existem outros recursos desenvolvidos que estendem ou reimplementam a arquitetura de acessos a SGDB de forma especializada, como no caso da Oracle, do Firebird e do MySQL, que desenvolvem suas próprias extensões do ADO.Net, afim de atender necessidade específicas de suas plataformas. Em relação ao SQL Server, a Framework.Net possui outros recursos exclusivos para prover integração com CLR.

Existem duas formas básicas de trabalhar com o ADO.Net, por meio de classes conectadas e desconectadas.

As classes conectadas permitem o acesso ao SGBD, por meio do .Net Data Provider, que constitui basicamente das seguintes entidades:

Connection: Responsável pela conexão ao SGDB, esta classe varia SGDB para SGDB (ex. SQLConnection, OracleConnection, OleDbConnection e OdbcConnection), possuindo métodos e propriedades que facilitam criar a conexão com cada um dos SGDB.

Por questões de arquitetura, para exigir que a conexão se feche depois de realizada a operação é recomendado o uso do bloco “Using”, exemplo:

// Criando o objeto de conexão ao banco de dados
using (SqlConnection conn = new SqlConnection("string de conexão"))
{
  // Chamando o método responsável pela abertura da conexão.
  conn.Open();
}

Recomendável não utilizar nenhum retorno de métodos dentro de blocos “Using”:

// Criando o objeto de conexão ao banco de dados
using (SqlConnection conn = new SqlConnection("string de conexão"))
{
  // Chamando o método responsável pela abertura da conexão.
  conn.Open();
  // Nunca faça isso:
  return true;

}

String de conexão: É responsável por identificar o endereço do SGDB, formas de autenticação e configurações de acesso.

Em aplicações Web, normalmente esta string é armazenada no arquivo web.config ou aplicações Windows e Windows Mobile no arquivo app.config, por questões de reaproveitamento e para facilitar alterações. Exemplo:

<!--web.config-->
<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="nome" connectionString="Data Source=in;Initial Catalog=db;User=us;Password=sn;"/>
  </connectionStrings>
</configuration>

Método responsável por retornar a string de conexão do web.config, as vezes se faz necessário adicionar a referência a System.Configuration ao projeto.

ConfigurationManager.ConnectionStrings["nome"].ToString();
// Criando o objeto de conexão ao banco de dados
string connectionString = ConfigurationManager.ConnectionStrings["nome"].ToString()
using (SqlConnection conn = new SqlConnection(connectionString))
{
  // Chamando o método responsável pela abertura da conexão.
  conn.Open();
}

Também existem formas de gerar a connection string em tempo de execução.
(at. http://msdn.microsoft.com/en-us/library/ms254947(VS.80).aspx )

Alguns exemplos de string de conexão para SQL Server e outros bancos de dados:
http://sqlfromhell.wordpress.com/2009/08/04/connection-strings/
http://msdn.microsoft.com/en-us/library/ms254500.aspx

Command: Depois de estabelecida a conexão com o SGDB, esta classe é o responsável por executar comandos e consultas no banco de dados. Seus objetos podem ser instanciado da forma tradicional por meio de um construtor ou chamando o método CreateCommand de objetos de conexão.Exemplo:

using (SqlConnection conn= new SqlConnection(""))
{
  using (SqlCommand cmd = new SqlCommand())
  {
    cmd.Connection = conn;
  }
}

Ou

using (SqlConnection conn= new SqlConnection(""))
{
  using (SqlCommand cmd = conn.CreateCommand())
  {
  }
}

Estes comandos podem ser comandos em SQL, nomes de StoredProcedures ou nomes de tabelas, para define qual o tipo comando é possível definir por meio do enumerador CommandType. Ex.:

// Para comandos SQL
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM tabela";
// Para stored procedure
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SpTabelaSel";
// Para tabela
cmd.CommandType = CommandType.TableDirect;
cmd.CommandText = "tabela";

Parâmetros: É a forma ideal de passar valores para comandos SQL e Stored Procedures. São eficazes para combater possíveis ataques de “SQL-Injection”. Exemplos:

//Forma de errada de passar valores para os comandos
cmd.CommandText = "INSERT INTO tabela (valor1) VALUES " + valor + ")";
//Utilizando parâmetros para inserir dados
cmd.CommandText = "INSERT INTO tabela (valor1) VALUES (@nome_parametro)";
cmd.Parameters.Add(new SqlParameter("@nome_parametro", valor);
//Utilizando parâmetros para excluir
cmd.CommandText = "DELETE FROM tabela WHERE valor1 = @nome_parametro";
cmd.Parameters.Add(new SqlParameter("@nome_parametro", valor);
//Utilizando parâmetros para alterar
cmd.CommandText = "UPDATE tabela SET valor1 = @nome_parametro1 WHERE valor2 = @nome_parametro2";
cmd.Parameters.Add(new SqlParameter("@nome_parametro1", valor1);
cmd.Parameters.Add(new SqlParameter("@nome_parametro2", valor2);
//Utilizando parâmetros para consultas
cmd.CommandText = "SELECT * FROM tabela WHERE valor1 = @nome_parametro";
cmd.Parameters.Add(new SqlParameter("@nome_parametro", valor);
//Utilizando parâmetros para StoreProcedures
cmd.CommandText = " SpTabelaSel";
cmd.Parameters.Add(new SqlParameter("@nome_parametro", valor);

A forma ideal de criar parâmetros é definir o tipo, tamanho e valor de forma separada.

//Forma ideal de criar um parâmetro
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@nome_parametro";
parameter.SqlDbType = SqlDbType.VarChar;
parameter.Size = 90;
parameter.Value = valor;

ou

SqlParameter parameter = new SqlParameter("@nome_parametro", SqlDbType.VarChar, 90);
parameter.Value = valor;

Métodos de execução: Para comandos que não são esperados retornos é recomendado o uso do método ExecuteNonQuery, cujo o retorno é um inteiro especificando o número de linhas afetadas. Exemplo:

cmd.CommandText = "INSERT INTO tabela (coluna) VALUES ('valor')";
cmd.ExecuteNonQuery();

Para comandos que se espera uma única célula, exemplo a execução das funções SQL, COUNT, SUM, MAX, MIN ou qualquer outra consulta que ternar somente um valor, é recomendado o uso do método ExecuteScalar. Exemplo:

cmd.CommandText = "SELECT COUNT(*) FROM tabela";
int count = (int)cmd.ExecuteScalar();
25
Out
09

SQL Server Day – Grande tecnologia, por grandes profissionais!

sqlserverday

O evento SQL Server Day 2009 trará mais de 12 horas de palestras com os maiores nomes de SQL Server no Brasil. Este primeiro evento será realizado no dia 07/11/2009 começando às 9 hs da manhã, mas como é on-line, o coffee break fica por sua conta!

Pelo post do Zavaschi, a grade do evento será a seguinte:

09:30 – 10:00 – Abertura do Evento
10:00 – 11:00 – Resource Monitor e Policy Management – Vitor Fava e Alexandre Lopes
11:00 – 12:00 – Entenda porque o Query Optimizer é mais esperto que você – Fabiano Amorim
12:00 – 13:00 – SQL Azure Database – Diego Nogare
13:00 – 14:00 – Novos Recursos de Desenvolvimento do SQL Server 2008 – Higor Fernandes
14:00 – 15:00 – Compressão de Dados e Backup no Microsoft SQL Server 2008 – Pedro A. G. Junior
15:00 – 16:00 – Entendendo TDE (Transparent Data Encryption) – Felipe Ferreira
16:00 – 17:00 – Entendendo as Common Table Expressions (CTE) – Thiago Zavaschi
17:00 – 18:00 – Powershell Coletando e Analisando os Dados – Laerte Junior e Thiago Zavaschi
18:00 – 19:00 – Solução Avançada de Problemas com Extended Events – Vladimir Magalhães
19:00 – 20:00 – Disaster Recovery – Backup, Restore e Tópicos Avançados – Gustavo Maia Aguiar
20:00 – 21:00 – Integre seu código .NET com o SQL Server usando o CLR – Roberto Fonseca
21:00 – 22:00 – Analise de Desempenho utilizando as Estatísticas de Espera – Alex Rosa

 

Mais informações:

SQL Server Day – Site Oficial
http://www.sqlserverday.com.br

24
Out
09

Instalando o Reporting Services 2005 – Windows 7 e Vista

Um dos principais problemas que encontro na instalação do SQL Server 2005 é a dependência do IIS para instalação do SQL Server Reporting Services (SSRS), conhecido como serviço de relatórios do SQL Server.

Quando se trata de um servidor Windows Server 2003/2008 ou até mesmo um computador Windows Vista ou Seven, a simples instalação do IIS é somente um dos passos para permitir a instalação do SQL Server Reporting Services. Muitas vezes o pessoal de infra-estrutura opta por instalar o IIS completo para habilitar o SSRS ou por instalar o SQL Server 2005 sem o SSRS, assim nunca realizando de uma forma ideal.

Para instalação do SSRS 2005 estarei utilizando um Windows Seven, mas etapas são idênticas para o Windows Vista.

Problema:

Nos primeiros passos da instalação do SQL Server 2005, as seguintes mensagens estarão presentes, caso o IIS não esteja corretamente instalado e configurado para se integrar com o SSRS:

Estas mensagens são alertas sobre as dificuldades de encontrar o serviço IIS e o suporte ao ASP.Net 2.0, levando à impossibilidade de instalar o SSRS 2005, visto que o SSRS é uma aplicação web (ASP.Net) dependente do serviço de webserver (IIS) do Windows.

Em seguida, também se deparará com a opção do “Reporting Services” desabilitada:

Solução:

Para adequar o Windows ao SSRS, utilizaremos no Painel de Controle a opção “Programas”:

Nesta opção há uma sub-opção de “habilitar ou desabilitar funcionalidades do Windows” (Turn Windows features on or off).

Nesta sub-opção haverá várias funcionalidades do sistema operacional para habilitar ou desabilitar, mas as que utilizaremos serão as funcionalidades relacionadas ao Internet Information Services (IIS).

Expandindo o IIS, IIS 6 Management Compatibility (Compatibilidade de gerenciamento do IIS 6), habilitemos as opções “compatibilidade WMI do IIS 6” e “IIS Metabase e compatibilidade com configuração do IIS 6”.

Uma das funcionalidades opcionais, que podem ser úteis para realizar a manutenção do IIS, é o “console de gerenciamento do IIS”, que também poderá ser habilitada:

Esta ferramenta de gerenciamento IIS poderá ser acessada pelo caminho:

%windir%\system32\inetsrv\InetMgr.exe

Após habilitadas as configurações do IIS, será necessário habilitar as funcionalidades “.Net Extensibility”, “ASP.NET”, “ISAPI Extensions” e “ISAPI Filters”, conforme abaixo:

E algumas (quase todas) configurações relacionadas às HTTP Features:

Por fim, habilitemos a funcionalidade de Seguraça de Windows Authentication:

E só resta aplicar as alterações. Recomendo realizar o restart do Windows após serem aplicadas destas alterações.

Agora na instalação do SQL Server 2005 não haverá mais alertas sobre o ASP.Net e o IIS.

Assim como será permitida a instalação do Reporting Services:

Mais uma consideração sobre a instalação é a possibilidade de instalar o SRSS 2005 sem a dependência do SQL Server Database Services, permitindo configurar o SSRS integrado a outro servidor (após a instalação do serviço ‘não configurado’), uma ótima solução para ambientes onde o servidor de aplicações web ou relatórios utiliza de um hardware exclusivo para tal funcionalidade.

 

Espero que este artigo auxilie na instalação do SSRS! Mas se tiverem alguma dúvida ou comentários relacionados, fiquem a vontade em comentar!

Como a minha VM do Windows Server 2008 não quis ajudar, vou demorar ainda um pouco para escrever sobre a instalação do SSRS 2005 em um servidor.

Artigos relacionados:

Instalando o SQL Server Reporting Server (Windows XP, 2003 e 2003 R2)

17
Out
09

F# no SQL Server

Boa noite pessoas!

No artigo desta semana, estarei demonstrando a criação de funções UNSAFE em um ambiente de integração CLR com o SQL Server. Um detalhe importante é o uso do F#, uma das novas linguages suportadas pelo Visual Studio 2008 e 2010. 

Para aqueles que desejam aprender um pouco mais sobre F#, abaixo segue o link de um artigo muito bom do Ted Neward:

http://msdn.microsoft.com/pt-br/magazine/cc164244.aspx

 

Microsoft F# May 2009 CTP

Para esta demonstração, estarei utilizando o Visual Studio 2008 com Microsoft F# May 2009 CTP, esta distribuição do F# além de ser bem diferente das primeiras, possui uma boa integração com o Visual Studio. Abaixo o link para download:

http://www.microsoft.com/downloads/details.aspx?FamilyID=7bb32f32-9fac-4f34-ad56-b0bda130cf00&displaylang=en

 

Criando um assembly CLR com F#:

Após instalar o CTP, além dos templates convencionais do Visual Studio 2008, haverá três modelos para trabalhar com o F#, o que utilizarei será o “F# Library”:

Como comentei no segundo artigo de Integração CLR, são necessárias algumas DLLs para o desenvolvimento dos competentes CLR para o SQL Server. Visto que nem todas as DLLs necessárias estão referenciadas no projeto desta demonstração, será necessário adicioná-las, clicando com o botão direito do mouse sobre “References”, opção “Add References…”:

 

A primeira referencia é a System.Data, que é responsável pelas bibliotecas ADO.Net:

E a segunda, System.Xml, responsável pelos objetos que estarão presentes na comunicação do SQL-CLR.

Para o desenvolvimento de um assembly semelhante ao do segundo artigo de Integração CLR, criarei um arquivo com extensão “fs” (lembrando que nos projetos F#, o nome do arquivo corresponde ao nome da classe no assembly).

Neste arquivo, primeiramente adicionarei as referencias aos tipos e entidades do SQL Server (semelhante ao using do C#):

open System.Data.SqlTypes
open Microsoft.SqlServer.Server

Em seguida, escreverei a função que calculará Pitagoras em F#:

[<SqlFunction>]
let Pitagoras (ab : SqlDouble, bc : SqlDouble) =
    let AB = ab.Value
    let BC = bc.Value
    let AC = sqrt((AB * AB) + (BC * BC))
    AC

Para a publicação, será necessária também a DLL da FSharp.Core. De forma a agilizar o processo, acessarei as propriedades da referência FSharp.Core:

 

Em seguida habilitando a propriedade “Copy Local”:

Após criar uma release do projeto, na pasta bin\Release estarão os dois assemblies necessários para a integração.

 

Publicando os assemblies no SQL Server: 

Agora no SQL Server, habilitarei a integração com CLR:

sp_configure 'clr enabled', 1
RECONFIGURE
GO

E no banco de dados, habilitarei a utilização de assemblies UNSAFE:

ALTER DATABASE [Nome do banco de dados]
SET TRUSTWORTHY ON
GO

Depois será necessário adicionar os dois assemblies com a opção de PERMISSION_SET = UNSAFE, conforme a sintaxe:

USE [Nome do banco de dados]
GO
CREATE ASSEMBLY [Nome do assembly]
FROM 'Caminho do assembly'
WITH PERMISSION_SET = UNSAFE
GO

Primeiramente, criarei o para FSharp.Code.dll e em seguida a DLL do componente, exemplo:

USE [SqlFromHell]
GO
CREATE ASSEMBLY [FSharp.Core]
FROM 'D:\FSharp.Core.dll'
WITH PERMISSION_SET = UNSAFE
GO
CREATE ASSEMBLY [FS_SQL]
FROM 'D:\FS_SQL.dll'
WITH PERMISSION_SET = UNSAFE
GO

Para a criação da função SQL é possível utilizar a seguinte sintaxe:

CREATE FUNCTION [dbo].[Nome da função SQL]
RETURNS [float]
AS
EXTERNAL NAME [Nome do assembly].[Nome da classe].[Nome da função]
GO

Exemplo:

CREATE FUNCTION [dbo].[Pitagoras] (@AB [float], @BC [float])
RETURNS [float]
AS
EXTERNAL NAME [FS_SQL].[Pitagoras].[Pitagoras]
GO

Depois, basta testar:

SELECT dbo.Pitagoras(3,2)

 

Considerações finais:

Na realidade, a DLL que é considera UNSAFE pelo SQL Server é a FSharp.Core, mas como o componente desenvolvido faz uso da FSharp.Code, ela somente necessitará ser considerada UNSAFE para ser executada.

Para as futuras release da .Net Framework e do Visual Studio, acredito que também existirá os mesmos templates que existem para o C#, J# e VB.Net também para o F#, visto que na internet existem diversos exemplo de implementação do com aplicações Windows, Web e até mesmo com SilverLight.

Finalizando esta séria de artigos sobre CLR, é perceptível como existem muitas possibilidades com o SQL Server tão pouco exploradas pelos profissionais de banco de dados e até mesmo desconhecidas pelos desenvolvedores.

As facilidades de integração com SQL Server também estão presentes em outras formas de integração como o SMO, ADO.Net e serviços do SQL Server como Integration Services e Reporting Services, permitindo os profissionais de banco de dados e desenvolvedores utilizarem o máximo de sua criatividade para criar soluções para o mundo coorporativo.

Ainda estou pensando se vou terminar por aqui a série de artigos sobre SQL-CLR, então se tiverem alguma dúvida ou dica para um novo artigo, poderá ser grandemente útil para elaboração dos próximos artigos.

 

Artigos relacionados:

Habilitando CLR no SQL Server:
http://sqlfromhell.wordpress.com/2009/09/19/habilitando-clr/

Criando funções CLR para o SQL Server:
http://sqlfromhell.wordpress.com/2009/09/26/funcoes-clr/

Debug de funções CLR no SQL Server:
http://sqlfromhell.wordpress.com/2009/10/03/debug-clr/

Publicando Assemblies e Funções CLR no SQL Server
http://sqlfromhell.wordpress.com/2009/10/10/publicando-clr/

 

O melhor site de F# que já encontrei:

FSharp.it – Functional programming on .Net
http://fsharp.it/

14
Out
09

Twitter – Capacidade, Desempenho e Disponibilidade

Legal… Eu pensava que não veria redes sociais em crise novamente, vendo esta imagem do Twitter, lembro do Orkut e do MSN no inicio dos tempos, quando muitos acessos tiravam os serviços do ar. Em tempos pré-históricos era o site do UOL que teve que enfrentar problemas semelhantes, até que aprendeu ganhar dinheiro com informação.

Como sou meio antigo, lembro do Portal da Oi, que tinha um serviço semelhante ao que é o YouTube hoje, que sofreu muito por falta da capacidade.

twitter

Mas falando sério, é difícil encontrar sistemas que tenham um plano para suportar seu crescimento, depois que o servidor chega ao seu limite de capacidade, desempenho e/ou disponibilidade, sempre são gastos absurdos por não ser algo previsto.

Para evitar que isso ocorra, procure prever o crescimento do seu sistema, principalmente analisando o ambiente (quantos usuários, servidor, rede) e estabelecendo limites para a arquitetura atual (com testes de stress, se possível).

Desempenho: Twitter vai continuar rápido e voando alto até quando?

Capacidade: Twitter vai agüentar quantas baleias?

Disponibilidade: Twitter terá que parar para tomar um fôlego ou ser substituído?

Segurança: Twitter tá preparado para voar hoje?

Uma ferramenta muito boa para acompanhar o crescimento do seu sistema e do seu servidor é o PERFMOM, que pode captura periodicamente dados sobre uso de memória, processamento e muitas outros dados, permitindo estabelecer deadlines para upgrades e estar preparado para desenvolver soluções para problemas que poderão parecer.

Acompanhamento: Como o Twitter passou esta semana? Pelo que estamos vendo, quanto tempo temos para mudanças?

Pois é bem melhor estar preparado para enfrentar um problema, do que ter que ser pego de surpresa por ele. Então conheça seu “inimigo” (risco) e o “campo de batalha” (ambiente), utilizando-os ao seu favor.

 

Quando o Twitter voltar, me sigam:
http://twitter.com/sqlfromhell

10
Out
09

Publicando Assemblies e Funções CLR no SQL Server

Boa noite pessoas!

Com este artigo, vou demonstrar como publicar manualmente no SQL Server as funções que tenham sido desenvolvido em um projeto SQL-CLR. Visto que não foram de tanta utilidade os links que eu enviei para aqueles que me questionaram por email, eu acredito que este artigo ajudará resolver estas necessidades.

Antes de iniciar com a demonstração, é necessário que entendam que o Visual Studio/.NET Framework gera o Assembly CLR (uma DLL, como preferir), que será necessário ser incorporada (referenciado) às outras Assembly já presentes no banco de dados. Antes de incorporar este Assembly, será necessário que seja habilitado o suporte/integração CLR presente no SQL Server (isso é uma configuração que vale para toda a instância do SQL Server e já foi demonstrada no artigo “Habilitando CLR no SQL Server”).

O Assembly é incorporado á um banco de dados e não a toda a instância do SQL Server, desta forma, se quiser utilizar este assembly em outro banco, será necessário incorporar o assembly a este outro banco.

Todas as funcionalidades (stored procedures, funções…) do Assembly deverão ser referenciadas também no banco de dados, pois não são automaticamente criadas quando é incorporado o assembly.

 

Publicando Assemblies CLR no SQL Server

Para publicações manuais, é recomendável optar pela opção “Release”, feito isso, clique na opção build do projeto.

Você poderá encontrar o Assembly CLR do projeto na pasta “bin\Release” do projeto. Para chegar até esta pasta mais rapidamente, você pode clicar com o botão direito sobre o projeto e chamar o item “Open Folder in Windows Explorer”.

 

Na pasta de release, você encontrará o assembly de seu projeto, agora mova este arquivo para uma pasta dentro do servidor de banco de dados.

No SQL Server, precisaremos referenciar o Assembly CLR ao banco de dados. Para executar este procedimento, é possível optar pelo SQL Server Management Studio, onde clicando com o botão direito em “Databases\[Nome do banco de dados]\Programmabiliby\Assemblies”, chamando o item “New Assembly” (conforme a figura abaixo), será aberto o painel de configurações para o novo assembly.

Conforme a figura abaixo, informe o caminho para seu banco de dados e algumas configurações adicionais, que algumas vezes podem ser necessárias.

Ou se preferir, é possivel criar este novo assembly de forma semelhante por código, conforme o exemplo:

CREATE ASSEMBLY [CS_SQL] FROM 'D:\CS_SQL.dll'
WITH PERMISSION_SET = SAFE

Pronto, agora você possui seu assembly dentro de seu banco de dados.

 

Para criar as referencias às funções do Assembly CLR dentro do banco de dados, utilizarei o seguinte exemplo, onde é criada uma função SQL que possui características semelhantes as da função CLR por ela referenciada em EXTERNAL NAME.

CREATE FUNCTION [dbo].[Pitagoras](@ab [float], @bc [float])
RETURNS [float]
AS
EXTERNAL NAME [CS_SQL].[UserDefinedFunctions].[Pitagoras]
GO

Feito isso, basta testar.

SELECT dbo.Pitagoras(3,2) AS Resultado;

 

Para finalizar esta série sobre CLR, no próximo artigo estarei trabalhando outra opção de integração CLR, ainda “unsafe”, mas uma opção interessante para trabalhar com cálculos pesados.

 

Artigos relacionados:

Habilitando CLR no SQL Server:
http://sqlfromhell.wordpress.com/2009/09/19/habilitando-clr/

Criando funções CLR para o SQL Server:
http://sqlfromhell.wordpress.com/2009/09/26/funcoes-clr/

Debug de funções CLR no SQL Server:
http://sqlfromhell.wordpress.com/2009/10/03/debug-clr/

09
Out
09

Seis Meses de SQL from Hell!!!

Hoje, o blog completa 6 meses de existência!

Nestes meses, não faltaram posts e artigos sobre eventos, livros, certificação e acima de tudo isso, muito SQL! Desde artigos sobre JOIN, CTE, CLR, DATETIME, configuração do servidor, até mesmo documentação (dicionário de dados e MER).

Obrigado pelas visitas, comentários e emails! Eu nem imaginava que seria o blog seria tão conhecido em tão pouco tempo!

Que tenhamos muitos meses pela frente e sempre novos desafios!

At.

Paulo Roberto Pereira Junior
MCP, MCTS, MCPD, MCT
http://www.sqlfromhell.com

07
Out
09

Microsoft Students to Business (S2B)

Você está convidado a participar do Programa Microsoft Students to Business (S2B).

O Programa tem por objetivo aproximar estudantes no mercado de trabalho nas carreiras de Tecnologia de Informação.

Para isso inclui diversas ações, sendo as principais, capacitações gratuitas para estudantes nas plataformas Microsoft e aproximação com empresas que buscam mão-de-obra com esse perfil.

O programa tem um total de 84 horas/aula para capacitação, com um conteúdo que abrange palestras sobre o mercado de trabalho e aulas teóricas e práticas ligadas às carreiras de TI.

As capacitações são voltadas a estudantes do ensino médio, cursos técnico, superior e de pós-graduação (latu sensu ou stricto sensu), e visam preparar futuros profissionais nas tecnologias Microsoft.

Ao longo de 3 fases os estudantes adquirem formação técnica para tornarem-se profissionais júnior de Infra-estrutura, Desenvolvimento, Bando de dados (obs.: esta assim no convite oficial) e Desenvolvimento de WebSites. Na primeira etapa o curso traz informações sobre as carreiras de TI, na segunda, aulas teóricas e na terceira, aulas práticas, com o desenvolvimento de um projeto de formatura. No encerramento são entregues certificados em um evento que inclui uma feira de empregos, para contato com empresas interessadas em contratar os participantes.

Para maiores informações acesse o manual do candidato e o cronograma do Programa S2B através do site http://www.programaS2B.com.br

Aproveite essa oportunidade! Inscreva-se já!