Archive for category SQL Server

Microsoft WebsiteSpark

Assim como o DreamSpark, voltado para estudantes, a Microsoft lançou um serviço para pequenas empresas que desenvolvem para a Web com ferramentas da Microsoft, é o WebsiteSpark.

O WebsiteSpark vai distribuir os seguintes aplicativos para as empresas sem custo algum:

  • Expression Studio 2 ou 3.
  • Expression Web 2 ou 3.
  • SQL Server 2008.
  • Visual Studio 2008.
  • Windows Server 2008.

tela

Clique na imagem acima para acessar a página oficial!

Nenhum comentário.

LINQ To SQL e ForeignKeyReferenceAlreadyHasValueException

1Em um último momento, antes de apresentar meu PFC, venho me deparado continuamente com a exceção: ForeignKeyReferenceAlreadyHasValueException – E eu não estava conseguindo resolver, inclusive muito preocupado pois é de vital importância o sistema não disparar esta exceção devido ao momento em que foi disparado:

ALTERAR O VALOR DE UMA FK DE UM DETERMINADO OBJETO.

Eu obviamente persisti no desenvolvimento de outras funcionalidades do sistema e ignorava determinadas partes deste quando a falha era encontrada. Já dizia um velho sábio: “Sem sacrifício, não á vitória”, ou seja, continuei persistindo.

Não sei se muitas pessoas sofrem deste mesmo mal: acostumado a trabalhar demais com o modelo de banco de dados relacional – Mas agora é uma ótimo momento de concertar.

A solução é tão banal (ao mesmo tempo que genial), que já tenho meu dia salvo antes mesmo de fazer a apresentação para a banca do PFC.

Eu estava fazendo assim:

[ObjetoAtual].MinhaFK = NovaFK;

O correto é:

[ObjetoAtual].ReferenciaObjetoFK = NovoObjetoFK;

MORAL: Você altera a referência da FK de seu objeto para o objeto correspondente à nova FK.

2 Comentários

Business Objects + Linq To SQL

Recentemente publiquei um artigo no DevMedia sobre o assunto intitulado neste post.

http://www.devmedia.com.br/articles/viewcomp.asp?comp=12171&fb=1

Se acharem o artigo útil e bom, cadastrem-se e votem!

Nenhum comentário.

Gerando Gráficos com XtraChart (Developer Express) + Linq To SQL

Nos últimos dias estive pesquisando também o componente de gráficos gerenciais da biblioteca de componentes Developer Express (Esta versão é a 7.2, mas serve para as versões mais atuais também).

Veja o DER utilizado para um exercício de medir audiência de canais:

1

Depois de criar o banco de dados no SQL Server (chamei de Audiencia), me ocupei em inserir dados nas tabelas para geração dos gráficos.

Criei um novo projeto WindowsForm (também chamei de Audiencia), em seguida, um arquivo Linq to SQL, mapeando todas as minhas tabelas.

Criei também um arquivo com nome de GDS.cs, contendo o seguinte código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Audiencia
{
  public static class GDS
  {
    private static AudienciaDataContext _db = null;
    public static AudienciaDataContext DB
    {
      get
      {
        if (GDS._db == null)
          GDS._db = new AudienciaDataContext();

        return GDS._db;
      }
    }
  }
}

Este código possui o objetivo de encapsular uma única conexão com o banco de dados durante a vida da aplicação. Em se tratando de WindowsForm, ou seja, Clientes Gordos, é uma ótima estratégia. Feito isto, arrastei para meu form o componente XtraChart da Developer Express, ignorando os assistentes automáticos que se abrem ao instanciá-los no formulário, pois vamos fazer a ligação com os dados via código C#.

O gráfico que pretendo mostrar é o gráfico de barras empilhadas, onde cada barra empilhada terá uma cor diferente e representará cada Canal da minha base. Estas barras estarão posicionadas sob uma base de Estados Civis, e a altura de cada barra representará o nível de audiência de cada canal por estado civil.

Antes de fazer isto, espero que tenham o conhecimento necessário sobre Linq To SQL, pois as classes geradas por este novo recurso possuem o modificador “partial”, o que nos permite trabalhar com a idéia de Business Objects. Com isto, criei uma nova classe com o mesmo nome da classe gerada para a tabela CanalTelespectador (afinal, ela é a tabela que possui os nossos dados).

Nesta nova classe, codifiquei o seguinte:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 

namespace Audiencia
{
  public partial class CanalTelespectador
  {
    public static int GetAudiencia(Canal c, EstadoCivil ec)
    {
      int count = (from ct in GDS.DB.CanalTelespectadors
                   where ct.Canal.Id == c.Id && ct.Telespectador.IdEstadoCivil == ec.Id
                   select ct).Count();

      return count;
    }
  }
}

É importante saber também como funcionam os gráficos deste componente. Nele, a base para a criação é a organização das séries, objetos que representam o principal item à ser analisado.

Já no código do formulário, no evento Load do Form, coloquei o seguinte código:

foreach (Canal c in GDS.DB.Canals)
{
  Series serie = new Series(c.Nome, ViewType.StackedBar);

  foreach (EstadoCivil ec in GDS.DB.EstadoCivils)
    serie.Points.Add(new SeriesPoint(ec.Nome, new double[] { CanalTelespectador.GetAudiencia(c, ec) }));

  this.chartControl.Series.Add(serie);
}

O resultado:

2

Se fizer isto e funcionar perfeitamente, para fazer outros tipos de gráfico, basta estudar na Documentação dos componentes da Developer Express.

Dica: Ao criar um objeto do tipo Serie, experimente mudar o seguinte:

Series serie = new Series(c.Nome, ViewType.Bar);

O resultado:

3

Além de mudar o ViewType, é importante entender o comportamento de cada tipo de gráfico antes de simplesmente mudar o valor deste parâmetro. Qualquer dúvida, pode entrar em contato.

Nenhum comentário.