.Net developer

Férias! (?!)

mais algumas: http://www.flickr.com/photos/smurf1s/4209961572/

Formato de data - t-sql

select substring(convert(char(20), getdate(), 120),1,10)

Ser cliente TVA: FAIL!

A vida bela com a TVA....

  • Sexta (20/11) - Controle remoto com problema. fail #1
  • Sexta (20/11) - Chamado aberto na TVA. Visita técnica agendada para Sábado (21/Nov).
  • Sábado 921/11) - Técnico não faz a visita! fail #2
  • Segunda (23/11) - Atendente faz contato telefônico perguntando se a visita técnica ainda é necessária (???). fail #3. Respondo que pode cancelar a visita!
  • Terça (24/11) - Técnico faz a visita marcada pra sábado ( fail #4 ) e deixa um controle remoto novo ( fail #5 ).

Código de porco em ASP

Típico código de porco, ou seja, de quem faz sistemas em ASP.


sub showMsgTela(nErr, sErr)
%>
<table width="100%" height="100%">
<tr>
<td width="100%" height="100%" align="center" valign="top">
<table styte="border : 3px outset #ADD8E6;">
<tr>
<td>
<%
if nErr<>0 then
%>
<font style="color: red">
Ocorreu um erro.<br>
Código: <%=nErr%><br>
Descrição:<br>
<%=sErr%>
</font>
<%
else
%><%=sErr%><%
end if
%>
</td>
</tr>
</table>
</td>
</tr>
</table>
<%
end sub
  • uso de ASP! Já começou errado por aí
  • estilização dentro do código
  • função em ASP para retornar uma tabela de HTML! (horrível!!!)
  • Tabelas do HTML!!! Na era do tableless
  • abreviações (nErr???)
  • Texto de display embutido hardcode.

ps: a loja virtual da Locaweb é inteira assim, não use aquele LIXO!

Split no Transact-SQL


declare @s varchar(100)
set @s='aaaa,bbbb,cccc'
declare @xml xml
set @xml = cast('<tag>' + replace(@s, ',','</tag><tag>') + '</tag>' as xml)
select T.i.value('.', 'varchar(255)') from @xml.nodes('tag') T(i)

Ativando ou não a IDENTITY da tabela

SET IDENTITY_INSERT MyTable ON

Spammer: Loser


Spammer querendo mandar vírus com fake do Bradesco...

Não sabe nem acertar o char-set coding do email falso q ele preparou!


Procedure inteligente

Como criar uma procedure inteligente, com filtros por todos os campos da tabela, opção de escolher quais colunas devem ser trazidas e como devem ser ordenados os registros.

Flexibidade total, pois funciona facilmente para necessidades distintas como:
  • pesquisar um cliente pelo seu ID (chave) e trazer todos seus dados
  • relatório de clientes cadastrados, com todos os dados da tabela, ordenando por ID.
  • listagem dos clientes, trazendo apenas ID e Nome para abastecer um combobox, por exemplo.





CREATE PROCEDURE [dbo].[STP_CLIENTE_LISTAR]
@ordenacao varchar(100) = null,
@colunas varchar(1000) = null,
@id_cliente int = null ,
@nm_fantasia varchar(30) = null ,
@nr_cnpj_cpf varchar(14) = null
AS
BEGIN

DECLARE @comando varchar(8000)

if @colunas is null
begin
SET @colunas = ' id_cliente ,
nm_cliente ,
nm_fantasia ,
nr_cnpj_cpf '
end

SET @comando =
'
SELECT ' + @colunas + '
FROM TB_CLIENTE
WHERE id_cliente = id_cliente '

--FILTROS
IF @nm_fantasia is not null
BEGIN
IF @nm_fantasia = ''
BEGIN
SET @comando = @comando + ' AND nm_fantasia is null '
END
ELSE
BEGIN
SET @comando = @comando + ' AND nm_fantasia = ''' + @nm_fantasia + ''''
END
END

IF @id_cliente is not null
BEGIN
IF @id_cliente = ''
BEGIN
SET @comando = @comando + ' AND id_cliente is null '
END
ELSE
BEGIN
SET @comando = @comando + ' AND id_cliente = ' + CAST(@id_cliente AS VARCHAR(10))
END
END

IF @nr_cnpj_cpf is not null
BEGIN
IF @nr_cnpj_cpf = ''
BEGIN
SET @comando = @comando + ' AND nr_cnpj_cpf is null '
END
ELSE
BEGIN
SET @comando = @comando + ' AND nr_cnpj_cpf = ''' + @nr_cnpj_cpf + ''''
END
END

---ORDENACAO
IF @ordenacao IS NOT NULL
BEGIN
SET @comando = @comando + ' ORDER BY ' + @ordenacao
END
ELSE
BEGIN
SET @comando = @comando + ' ORDER BY NM_CLIENTE'
END
EXECUTE(@comando)

END






Altura de div em css

Definindo altura auto-redimensionáveis (caso tenha conteúdo em excesso). O truque é necessário pois o IE não funciona direito!


min-height: 100px;
height: auto !important;
height: 100px;

Sem estádio e sem torcida

Públicos de São Paulo e Curinthia no Brasileirão 2009.

Mito: curinthiano vai mais ao estádio...


» os valores em negrito no final das listas representam os totais (e a verdade)
» jogos com público zero significa público não divulgado.
» Curinthia tinha 2 jogos a mais que o São Paulo com púbico não divulgado.
» por justiça, foram retirados 2 públicos do São Paulo do total computado.
» os 2 jogos retirados foram os 2 maiores públicos do São Paulo no campeonato (pra dar uma chance para o Curinthia...)

Escritório da Buenit (Brasil)

Lençol de zagueiro!

Anderson dando show no FIFA, goleando o Arsenal do Thiago (http://www.twitter.com/tavancini)

Stored Procedures com SubSonic

Como chamar uma Stored Procedure e obter seus dados num DataTable


StoredProcedure sp = DAL.SPs.Cliente_Listar(3);
DataTable dt = sp.GetDataSet().Tables[0];

string nome;
foreach (DataRow row in dt.Rows)
{
nome = row[1].ToString();
}

Para executar uma procedure só de atualização ou insert, bastava dar um sp.Execute() ao invés do GetDataSet().

No código, ao digitar o DAL.SPs. (logo depois do ponto) são listadas pelo Visual Studio todas as procedures da base!.

Para rodar este código, necessário o using SubSonic.

Como ter Subsonic? Se vira: http://www.subsonicproject.com/ ou dá uma googleada!

Masked Input Plugin

First, include the jQuery and masked input javascript files.

jquery.js
jquery.maskedinput.js

Next, call the mask function for those items you wish to have masked.

jQuery(function($){
$("#date").mask("99/99/9999");
$("#phone").mask("(999) 999-9999");
$("#tin").mask("99-9999999");
$("#ssn").mask("999-99-9999");
});

Optionally, if you are not satisfied with the underscore ('_') character as a placeholder, you may pass an optional argument to the maskedinput method.

jQuery(function($){
$("#product").mask("99/99/9999",{placeholder:" "});
});

Optionally, if you would like to execute a function once the mask has been completed, you can specify that function as an optional argument to the maskedinput method.

jQuery(function($){
$("#product").mask("99/99/9999",{completed:function(){alert("You typed the following: "+this.val());}});
});

You can now supply your own mask definitions.

jQuery(function($){
$.mask.definitions['~']='[+-]';
$("#eyescript").mask("~9.99 ~9.99 999");
});

http://digitalbush.com/projects/masked-input-plugin/

ecommerce

Meu sistema de e-commerce, o último que faço.
Somente programação:

Design implementado, totalmente com CSS:

Chave composta com SubSonic

Select qry = new Select();
qry.From(DAL.Tabela)
.Where(DAL.Tabela.Chave1).isEqualTo(valor1)
.And(DAL.Tabela.Chave2).isEqualTo(valor2);

DAL.Tabela oTabela = qry.ExecuteSingle<DAL.Tabela>();

oTabela.CampoTexto = "Novo valor";
oTabela.Save();


Preço em formato Moeda

Decimal aux = 1.9;
Console.WriteLine(aux);
Console.WriteLine(String.Format("{0:C}", v_uni));

A saida vai ser:

1.9
R$ 1,90

Slideshow @ Flickr

Parâmetros para um User Control

control = Page.LoadControl("...caminho...");
control.GetType().GetProperty("nome_do_parametro").SetValue(control, valor, null);

Will take several minutes....

...no chance to cancel!

Too user friendly


McDonalds Programmer (1)

Nova músiquinha do McDonalds Programmer:
Um editor web dentro de uma Tab Control numa página do framework Efedablio em dotnet c# 2.0

Seleção só é PENTA pq o SPFC é Hexa


Mais uma vez, a seleção só ganha mais um título graças a existência do SPFC! Na home do site da FIFA, só foto de ex-jogadores de SP: destaque para Kaká e Luis Fabiano, uma outra foto de Kaká na sessão de fotos a direita, uma entrevista com o Grafite...

Não é a toa que o São Paulo F.C. é o clube que mais cedeu jogadores para a seleção brasileira no mais importante torneio do mundo, a Copa do Mundo, em toda a história.

Repara o anúncio dos resultados dos jogos logo abaixo da foto principal...

Anderson @ South Park

Feito no
http://www.sp-studio.de

Tecnologia na hora errada

Há momentos em que a tecnologia não precisa ser explorada a todo custo e basta um simples papel com um endereço anotado (em lápis). 

DJ Dan @ Bruna's Festival Party 2009 (SP)




Fotos em http://www.flickr.com/photos/smurf1s/3606826635/

DJ Anderson @ Jump Beats



Aqui, foto da PVT 2009.
Em breve, vídeo do Aniversário da Bruna e Fotos da PVT 2009.

Put na Laje

Estréia dos sputiniks

Cannot use a leading .. to exit above the top directory

Esta mensagem ocorre no DOTNET quando as referências a controles, como os web user controls, são feitos com o uso de mapeamento relativo como "../" e "../../".  O ideal, em dotnet, é sempre, aliás, o CORRETO é SEMPRE usar o caminho absoluto de tudo!! Para tanto, basta colocar um "~" antes da pasta raiz. 


Ex: path de uma imagem, usar  src="~/pasta_raiz/meu_diretorio_imagens/imagem.jpg", só para citar um caso básico.

Mas, como sempre, há um segredo, que eu só descobri depois de algumas horas: os links de referência a arquivos css, nativos do próprio HTML, o dotnet consegue, tem a capacidade, o dom de se atrapalhar com as suas referências! Mesmo sendo HTML. Sim, o HTML com referencia relativa , no cabeçalho da página dotnet , dá bug no server! Incrivel. Solução? Adicione esses links do header da página via code-behind mesmo, como fiz no exemplo abaixo:

        HtmlHead header = (HtmlHead)Page.Header;
        HtmlLink link = new HtmlLink();
        link.Attributes.Add("href", "~/css/meu_arquivo_css.css");
        link.Attributes.Add("type", "text/css");
        link.Attributes.Add("rel", "stylesheet");
        header.Controls.Add(link);

É chato? Burocrático? Sem noção? Sim. Mas é o que faz esta problemática funcionar!

Propriedades CSS x JavaScript

Propriedade - CSS Referência - JavaScript
background background
background-attachment backgroundAttachment
background-color backgroundColor
background-image backgroundImage
background-position backgroundPosition
background-repeat backgroundRepeat
border border
border-bottom borderBottom
border-bottom-color borderBottomColor
border-bottom-style borderBottomStyle
border-bottom-width borderBottomWidth
border-color borderColor
border-left borderLeft
border-left-color borderLeftColor
border-left-style borderLeftStyle
border-left-width borderLeftWidth
border-right borderRight
border-right-color borderRightColor
border-right-style borderRightStyle
border-right-width borderRightWidth
border-style borderStyle
border-top borderTop
border-top-color borderTopColor
border-top-style borderTopStyle
border-top-width borderTopWidth
border-width borderWidth
clear clear
clip clip
color color
cursor cursor
display display
filter filter
font font
font-family fontFamily
font-size fontSize
font-variant fontVariant
font-weight fontWeight
height height
left left
letter-spacing letterSpacing
line-height lineHeight
list-style listStyle
list-style-image listStyleImage
list-style-position listStylePosition
list-style-type listStyleType
margin margin
margin-bottom marginBottom
margin-left marginLeft
margin-right marginRight
margin-top marginTop
overflow overflow
padding padding
padding-bottom paddingBottom
padding-left paddingLeft
padding-right paddingRight
padding-top paddingTop
page-break-after pageBreakAfter
page-break-before pageBreakBefore
position position
float styleFloat
text-align textAlign
text-decoration textDecoration
text-decoration: blink textDecorationBlink
text-decoration: line-through textDecorationLineThrough
text-decoration: none textDecorationNone
text-decoration: overline textDecorationOverline
text-decoration: underline textDecorationUnderline
text-indent textIndent
text-transform textTransform
top top
vertical-align verticalAlign
visibility visibility
width width
z-index zIndex

consumindo RSS do framework EfeDablio

FW_UTIL.RssReader oRss = new FW_UTIL.RssReader();
FW_UTIL.RssFeed feed =
oRss.Retrieve("http://twitter.com/statuses/user_timeline/7428582.rss");

Literal literal;
foreach (FW_UTIL.RssItem item in feed.Items)
{
literal = new Literal();
literal.Text = item.Pubdate.ToString() & "<br/>" &
item.Description & "<br/><br/>";
pnl_historico.Controls.Add(literal);
}

tiptopbum

implementando os tooltips da DevExpress. #AspxPopUpControl


controle de estoque

gestão de estoque de produtos @FWCommerce (framework de e-commerce)

Altura de Image Button (C#) por CSS

Objetos criados no html, como o DIV, precisam ter a seguinte definição
em sua classe CSS, para a altura ser respeitada tanto no IE como no
Firefox ( em função da falta de padrão do IE! ):

min-height:20px;
height:auto !important;
height:20px;

Sim, você tem que escrever estas 3 linhas para definir altura por CSS,
quando você quer que a altura do objeto seja respeitada, ou seja, se
tiver conteúdo dentro do DIV, o objeto é extendido naturalmente, ao
invés de "comer" o conteúdo gerado dinamicamente, por exemplo, dentro
dele.

Porém, se o objeto for um Image button do .Net (framework 2.0), esta
regra não deve ser aplicada. Basta a propriedade height do CSS!

Toda regra tem uma exceção....

Criando arquivos em runtime com C#

string file_path = Server.MapPath("teste.txt");
File.Create(file_path).Close();
TextWriter oWriter = File.AppendText(file_path);
oWriter.WriteLine("texto");
oWriter.WriteLine("texto 2");

oWriter.Close();

ps. Importar o System.IO !!

vbcrlf em c#

Equivalente ao VBCRLF para C#: System.Environment.NewLine

CS0016: Could not write to output file 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\xxxxxx\xxxx

Description: An error occurred during the compilation of a resource
required to service this request. Please review the following specific
error details and modify your source code appropriately.

Compiler Error Message: CS0016: Could not write to output file
'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET
Files\wholesales\xxxxx\xxxxx\App_Code.xxxxxxx.dll' -- 'Access is
denied. '

After some antivirus activities, my partner development machine face
issue above.


This may due to some permission setting in Temp folder. To solve it,


1. Go to %Systemroot%, normally C:\WINDOWS or C:\WINNT
2. Right-click the Temporary folder (mine is C:\WINDOWS\Temp) and
select Sharing and Security. Select the Security tab and take a look
at the list of "Group or user names:"
3. NETWORK SERVICE should be in the list. If it is not, click Add and
type Network Service in the text box:


4. Make sure NETWORK SERVICE have Full Control in the Permissions list.


5. Click OK.


6. Restart IIS (Run iisreset)


Test on the web, and it solved.

Como ordenar registros de um Dataset

Como dar um order by num dataset

DataSet ds = objeto.MetodoQueRetornaUmDataset()
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = "NOME_CAMPO_PARA_ORDENAR ASC";
ds.Tables.Clear();
ds.Tables.Add(dv.ToTable());

definindo a propriedade Text de um campo password em c#

campo textbox em .Net do tipo password vem sem value carregado, quando
é abastecido ( como num load do BD ). O que fazer?
Não usar textbox.Text = "valor".. Adicione via attributes:
textbox.attributes.add("value","valor");

Mas cuidado: Este valor definido via attributes é visivel no codigo fonte html .