Pesquisa

terça-feira, 28 de dezembro de 2010

Enviar e-mail de forma assincrona

Um dos maiores problemas ao fazer envio de e-mail é a tempo que demora o seu envio.

Podemos então enviar os e-mails de forma assincrona, sem interromper a execução do programa.

Utiliza-se a classe System.Net.Mail.MailMessage.

public static void SendEmail(System.Net.Mail.MailMessage m) 
{
SendEmail(m, true);
}

public static void SendEmail(System.Net.Mail.MailMessage m, Boolean Async)
{

System.Net.Mail.SmtpClient smtpClient = null;

smtpClient = new System.Net.Mail.SmtpClient("localhost");

if (Async)
{
SendEmailDelegate sd = new SendEmailDelegate(smtpClient.Send);
AsyncCallback cb = new AsyncCallback(SendEmailResponse);
sd.BeginInvoke(m, cb, sd);
}
else
{
smtpClient.Send(m);
}

}

private delegate void SendEmailDelegate(System.Net.Mail.MailMessage m);

private static void SendEmailResponse(IAsyncResult ar)
{
SendEmailDelegate sd = (SendEmailDelegate)(ar.AsyncState);

sd.EndInvoke(ar);
}




domingo, 19 de dezembro de 2010

Configurar D-Link 524

WAN Settings:
- PPPoE: Choose this option if your ISP uses PPPoE. (For most DSL users)

PPP over Ethernet
- Dynamic PPPoE
- Maximum Idle Time: 0
- MTU: 1305

config modem

performance modem

terça-feira, 26 de outubro de 2010

Como desativar Constraints

--Desabilitar:
ALTER TABLE NOMETABELA NOCHECK CONSTRAINT ALL
--Habilitar:
ALTER TABLE NOMETABELA CHECK CONSTRAINT ALL




Limpar banco de dados / tabelas

Script para limpar todas as tabelas do banco de dados.

  • Deletar registros
  • Limpar os Idenficadores (CHECKIDENT)
BEGIN TRAN

PRINT 'BEGIN TRAN'

DECLARE @Tabela VARCHAR(50)
DECLARE @DadosAdmin CHAR(1)
DECLARE @ReSeed CHAR(1)
DECLARE @SQL VARCHAR(1000)

-- DECLARA O CURSOR QUE VAI PASSA PELAS TABELAS
DECLARE tables_cursor CURSOR FOR
SELECT name
from sysobjects
where xtype = 'U'
AND name IN()

-- ABRE O CURSOR E CARREGA AS VARIÁVEIS COM OS DADOS DA PRIMEIRA TABELA
OPEN tables_cursor
FETCH NEXT FROM tables_cursor INTO @Tabela

-- LOOP PARA PERCORRER TODAS AS TABELAS PRESENTES NO CURSOR
WHILE @@FETCH_STATUS = 0
BEGIN

-- SCRIPT PARA DESABILITAR TRIGGERS E CONSTRAINTS
SET @SQL = '
------------------------------------------------------------------
ALTER TABLE '
+ @Tabela + ' NOCHECK CONSTRAINT ALL
GO
ALTER TABLE '
+ @Tabela + ' DISABLE TRIGGER ALL
GO
------------------------------------------------------------------
'

--EXEC(@SQL)
PRINT(@SQL)


FETCH NEXT FROM tables_cursor INTO @Tabela
END

-- FECHA O CURSOR PARA RESETAR O LOOP
CLOSE tables_cursor

PRINT '
------------------------------------------------------------------
------------------------------------------------------------------
------ FIM DA DESABILITAÇÃO DE TRIGGERS E CONSTRAINTS ------
------------------------------------------------------------------
------------------------------------------------------------------
'


-- ABRE NOVAMENTE O CURSOR PARA EFETUAR O SEGUNDO LOOP
OPEN tables_cursor
FETCH NEXT FROM tables_cursor INTO @Tabela

WHILE @@FETCH_STATUS = 0
BEGIN

-- DELETA OS REGISTROS DA TABELA
SET @SQL = '------------------------------------------------------------------
DELETE FROM '
+ @Tabela
SET @ReSeed = '0'

-- HABILITA TRIGGERS E CONSTRAINTS
-- E RESETA A CONTAGEM SE A TABELA POSSUI UMA COLUNA IDENTITY
-- * SE A TABELA POSSUI DADOS DO ADMIN, A CONTAGEM DA IDENTITY RECEBE 1
-- PARA INICIAR EM 2 A PARTIR DO PRÓXIMO REGISTRO
SET @SQL = @SQL + '
GO
ALTER TABLE '
+ @Tabela + ' CHECK CONSTRAINT ALL
GO
ALTER TABLE '
+ @Tabela + ' ENABLE TRIGGER ALL
GO

IF OBJECTPROPERTY(OBJECT_ID('
'' + @Tabela + '''), ''TableHasIdentity'') = 1
BEGIN
DBCC CHECKIDENT ('
'' + @Tabela + ''',RESEED,' + @ReSeed + ')
END
GO
------------------------------------------------------------------
'

--EXEC(@SQL)
PRINT(@SQL)

FETCH NEXT FROM tables_cursor INTO @Tabela
END

-- EXEC(@SQL)
PRINT (@SQL)

CLOSE tables_cursor

DEALLOCATE tables_cursor

ROLLBACK TRAN

Créditos: Tiago Bandeira

terça-feira, 12 de outubro de 2010

BlogEngine.NET

BlogEngine.NET é uma ótima ferramenta para gerenciamento de conteúdo.

É fácil de configurar, personalizar e usar.

http://www.dotnetblogengine.net/

domingo, 3 de outubro de 2010

The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'

 

A Exception The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'.  However, the current database schema is not compatible with this version.  You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version. ocorre quando a tabela aspnet_SchemaVersions não contém a versão do MembershipProvider.

Para inserir os registros na tabela aspnet_SchemaVersions segue abaixo o script:

insert into aspnet_SchemaVersions values('common', 1, 1)
insert into aspnet_SchemaVersions values('health monitoring', 1, 1)
insert into aspnet_SchemaVersions values('membership', 1, 1)
insert into aspnet_SchemaVersions values('personalization', 1, 1)
insert into aspnet_SchemaVersions values('profile', 1, 1)
insert into aspnet_SchemaVersions values('role manager', 1, 1)



segunda-feira, 26 de julho de 2010

VSS – Utilizando a tecla SHIFT

No Microsoft Visual SourceSafe, ao clicar com o botão esquerdo sobre alguma das opções dos projetos, utilizar o botão SHIFT, assim, aparecerá algumas opções mais avançadas.

Checked - Verificar OverflowException

Utilizar o checked para verificar a consistência numérica de uma operação matemática.

public void Somar()
{
Int16 valor = 32767;
checked
{
valor += 5;
}
}

Um material bem interessante encontra-se aqui: U is for… unchecked

SQL - Geração Automática de Dados

Um ótimo artigo mostrando como utilizar o visual studio para a geração de dados para bancos de dados SQL:
Visual Studio Team System 2008 DataBase Edition Parte IV: Geração Automática de Dados
É utilizado um Database Project e um Data Generation Plan. É possível utilizar expressões regulares para manter um padrão no momento de gerar a carga de dados.

domingo, 4 de abril de 2010

Comandos SQL

Funções de agrupamento:

AVG() = Retorna o valor médio de uma coluna específica
BINARY_CHECKSUM() = O valor do BINARY_CHECKSUM computado sobre uma linha ou uma tabela ou sobre uma lista de expressões. BINARY CHECKSUM é usada para detectar alterações em uma linha ou uma tabela.
CHECKSUM() = O valor de CHECKSUM computado sobre uma linha ou uma tabela, ou sobre uma lista de expressões. CHECKSUM é usada para construir índices de hash.
CHECKSUM_AGG() = O valor de CHECKSUM de um grupo. Valores nulos são ignorados.
COUNT() = Retorna o número de linhas
COUNT_BIG() = igual ao COUNT mas o COUNT_BIG sempre retorna um tipo de dados bigint.
MAX() = Retorna o valor máximo de uma coluna específica
MIN() = Retorna o valor mínimo de uma coluna específica
SUM() = Retorna a soma de uma coluna específica
STDEV() = Desvio padrão de todos os valores
STDEVP() = Desvio padrão da população
VAR() = Variância estatistica de todos os valores
VARP() = Variância estatística de todos os valores da população

Funções de manipulação de strings:

ASCII(string) = pega o valor em ASCII da string
CHAR(integer) = troca inteiro do ASCII em um caráter
LEN(string) = Identifica o comprimento de uma expressão em caracteres
LOWER(string) = converte uma string uppercase para lowercase.
LTRIM(string) = remove os espaços em branco
PATINDEX(posicao, expressao) = devolve a posicão de uma string dentro de um texto. Se não encontrar, retorna zero.
REPLICATE(string, integer) = Repete N vezes um caractere especificado
REVERSE(string) = retorna o inverso de uma expressao
RTRIM (string) = remove os espaços em branco à direita de uma string
SPACE(integer) = que retorna o número de espaços em branco informados no parâmetro
STUFF(string texto, X, Y, string texto_a_inserir) = apaga da string "texto" os y caracteres a partir da posição x e os substitui por "texto_a_inserir"
SUBSTRING(string texto, posicao_inicial, tamanho) = retorna uma string com o comprimento definido em "tamanho" extraida da string "texto", a partir da "posicao_inicial"
UPPER(string) = retorna string em maiusculas

Funções de manipulação de data/hora:

nomes das partes de data:

Year = yy, yyyy
Quarter = qualquer, que
Month = mm, m
Dayofyear = dy, y
Day = dd, d
Week = wk, ww
Hour = hh
Minute = mi, n
Second = ss, s
Millisecond = ms

DATEADD (parte, numero, data) = adiciona um valor a parte de uma data
DATEDIFF (parte, data inicial, data final) = subtrai a data inicial da data final, indicando o resultado na unidade definida em "parte"
GETDATE() = retorna a data atual do sistema
DATENAME (parte, data) = retorna o nome da parte de uma data
DATEPART(parte, data) = retorna a parte de uma data

Funções de Sistema:

CAST(expressao as datatype) = converte uma expressao no datatype informado
COL_LENGTH(nome_da_tabela, nome_da_coluna) = retorna o tamanho da coluna
COL_NAME(id_da_tabela, id_da_coluna) = retorna o nome da coluna
DATALENGTH(expressao) = retorna o numero de bytes usados para armazenar a expressao
DB_ID(nome_do_banco) = retorna o ID do banco informado
DB_NAME(id_do_banco) = retorna o nome do banco
HOST_ID() = retorna a ID da estação que está acessando o SQL Server
HOST_NAME() = retorna o nome da estação que está acessando o SQL Server
IDENT_INCR(nome_da_tabela_ou_view) = retorna o valor incrementado
IDENT_SEED(tabela_ou_view) = retorna o valor inicial da coluna
INDEX_COL(nome_da_tabela, indice_id, chave_id) = retorna o nome da coluna que participa do índice
ISNULL(expressao, valor) = se a expressao for null, troca pelo valor especificado
ISNUMERIC(expressao) = retorna 1 se a expressao for numerica e 0 se não for
NEWID() = retorna um novo valor do tipo uniqueidentifier
NULLIF(expressao_1, expressao_2) = retorna nulo se as duas expressoes forem equivalentes. Se não forem, retorna a primeira expressao.
OBJECT_ID(nome_do_objeto) = retorna o ID de um objeto, a partir do nome fornecido
OBJECT_NAME(ID_do_objeto) = retorna o nome do objeto, a partir do ID fornecido
PARSENAME(objeto, parte) = retorna a parte do nome de um objeto, desde que tenha sido qualificado
STATS_DATE(tabela_id, indice_id) = retorna a data em que as estatísticas do índice foram atualizadas
SUSER_SID(nome_do_usuario) = retorna o ID do usuario informado
SUSER_NAME(usuario_id) = retorna o id do usuário no servidor. O argumento é opcional.
SUSER_SNAME(id_do_usuario) = retorna o nome do usuario informado. Se nenhum ID de usuario for passado para a função, retorna o nome do usuario logado
USER_ID(nome_do_usuario) = retorna o ID do usuario informado para o BD em uso
USER_NAME(id_do_usuario) = retorna o usuario conectado ao BD

Funções Matematicas:

ABS(numero) = retorna o valor absoluto do numero
ACOS(float) = retorna o arco-coseno do numero informado
ASIN(float) = retorna o arco-seno do numero informado
ATAN(float) = retorna o arco-tangente do numero informado
ATN2(Float expressao_1, float expressao_2) = Arco-tangente do valor definido pela divisão da primeira expressão pela segunda
CEILING(numero) = retorna o menor inteiro que seja maior ou igual ao numero informado
COS(float) = retorna o coseno do numero informado
COT(float) = retorna o cotangente do numero informado
DEGREES(numero) = converte radianos para graus
EXP(float) = retorna o exponencial de um numero especificado
FLOOR(numero) = retorna o maior inteiro que seja menor ou igual ao numero informado
LOG(float) = retorna o logaritmo natural do numero informado
LOG10(float) = retorna o logaritmo base 10 do numero informado
PI() = retorna o valor de PI 3.1415926535897931.
POWER(numero, potencia) = retorna o valor elevado à potencia informada
RADIANS(numero) = converte graus para radianos
RAND(expressao) = um número aleatório entre 0 e 1. Expressão é opcional e será usada como semente da cadeia pseudo-aleatória
ROUND(numero, precisao, arredonda_ou_trancar) = arredonda ou tranca o numero fornecido de acordo com a precisao informada. Se o terceiro parametro não for passado para a funçao, o numero é arredondado. Se quiser que o numero seja truncado, deve-se fornecer o valor 1
SIGN(numero) = retorna sinal positivo, negativo ou zero do numero
SIN(float) = retorna o seno do angulo especificado
SQRT(float) = retorna a raiz quadrada de um numero
TAN(float) = retorna a tangente de um numero informado
SQUARE(float) = retorna o quadrado de um numero

Função de conversão:

CONVERT(tipo(tamanho), expressão, estilo) = converte a expressão para o tipo de dado. O tamanho e o estilo são opcionais

Créditos:

http://scriptbrasil.com.br

SQL – “Rastreando” objetos

Através do script abaixo é possivel rastrear quais stored procedures, functions, triggers, etc… que são impactadas por alguma mudança em nome de tabelas, inserção de uma coluna nova, etc…
 
select so.name, crdate
from
syscomments sc
inner join sysobjects so on sc.id = so.id
where text like '%texto%'
group by so.name, crdate