Archive for category C#
MS11-100 – Atualização de Segurança
Publicado por Codigo com Cerveja em C# em 21 de maio de 2012
Bom, como faz muito tempo que não adiciono nada aqui, agora vai uma dica importante e fundamental…
Em um belo dia no meu serviço, estava com o projeto pronto e terminado, em ASP.NET utilizando AJAX, e do nada após uma atualização automática do Windows, todos os formulários simplesmente deixaram de funcionar, passamos dias procurando o motivo, quando encontro no site da microsoft a explicação..
Aqui vai a URL: http://support.microsoft.com/kb/2661403/pt-br
Bom resumindo foi o seguinte, nessa atualização de segurança a microsoft diminuiu a quantidade de chaves em uma requisição, quer seja post ou get, fazendo com que ao utilizar ajax ou qualquer json,a requisição fica imcompleta.
OS erros são os seguintes que aparecem:
Os dados do formulário codificado URL não são válidos.
A operação não é válida devido ao estado atual do objeto.
A operação não é válida devido ao estado atual do objeto.
A solução é bem simples pasta adicionar no WebConfig uma Key:
<configuration> <appSettings> <add key="aspnet:MaxHttpCollectionKeys" value="1000" /> </appSettings> </configuration>
O valor dessa Key pode ser configurado, com uma valor aproximado que chave utilizada…
Dica importante, só funciona para ASP.NET 2.0 ou superior, para ASP.NET 1.0 deve procurar nos registros..
As diferentes formas de resolução estão no link.
Otimo código pra vcs…
Connection String e Entity framework
Publicado por Codigo com Cerveja em C# em 29 de julho de 2011
Bom pessoal, faz tempo que não posto nada.. mas anda corrido..
Bom hoje tenho uma novidade, passei um tempo para descobrir a melhor forma de trabalhar com vários arquivos entity framework, não sei se vocês já tiveram esse problema, mas eu desenhei uma arquitetura baseada em entity e divido cada projeto em uma arquivo “.edmx” e o problema que encontrei é que para aquivo desses é necessário uma string de conexão.. E começou a ficar muito grande o webconfig.
Bom, primeiro criei uma classe partial do edmx criado, identico ao código abaixo:
public partial class dbSIIAval : ObjectContext { public dbSIIAval(bool CnStringCorreta) : base(Misc.GetCompleteConnectionString("dbSIIEntities", "Aval"), "dbSIIAval") { if (!CnStringCorreta) throw new Exception("Só pra ter certeza que sempre seja informado TRUE."); this.ContextOptions.LazyLoadingEnabled = true; this.OnContextCreated(); } }
Ai então, como podem perceber esse método é uma sobrecarga do método original, e coloquei um parâmetro para diferenciar dos construtores nativos. Também uso um método chamado “GetComplete ConnectionString” que apresento a seguir:
Public static EntityConnection GetCompleteConnectionString(string strConnectionName, string classe) { string strConnectionString = string.Empty; EntityConnection entConn = new EntityConnection(); try { EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(); strConnectionString = ConfigurationManager.ConnectionStrings[strConnectionName].ConnectionString; entityBuilder.ConnectionString = strConnectionString; entityBuilder.Metadata = Conections.ResourceManager.GetString(classe); entConn = new EntityConnection(entityBuilder.ToString()); } catch { strConnectionString = string.Empty; } if (string.IsNullOrEmpty(strConnectionString)) throw new Exception("ConnectionString não encontrada."); return entConn; }
E esse método busca de um arquivo “.RES” arquivo de recurso onde eu mantenho somente os caminhos dos arquivos. Desse modo eu posso utilizar uma única connection String e quando for necessário alterar fica mais fácil.
Espero que tenha ajudado essa dica.
Até a próxima.
Agrupar Dados Grid View
Publicado por Codigo com Cerveja em C# em 11 de junho de 2011
Bom gente, outro dia no serviço tive um problema com agrupar dados na consulta do banco. Ai tive que pensar em um jeito de agrupar isso em codigo. Foi molezinha e funciona que é uma beleza.Mas lembrem-se que isso funciona para consultas pequenas, para consultas com retorno de muitas linhas pode demorar muito, o melhor é usar uma procedure. Posto abaixo o código para quem precise fazer o mesmo.
protected DataTable TrataGrid(DataTable dt)
{
//crio um dataview para a leitura ser mais rápida
DataView dv = new DataView(dt);
dv.Sort = “n_completo_ds,n_completo_cr”;
//Variáveis de controle para o agrupamento
string ultimaDisc = “”;
string ultimoCurso = “”;
//DataTable final com os campos já agrupados
DataTable dtPronto = new DataTable();
dtPronto.Columns.Add(“c_ident_cr”);
dtPronto.Columns.Add(“n_completo_ds”);
dtPronto.Columns.Add(“n_completo_cr”);
dtPronto.Columns.Add(“turno”);
dtPronto.Columns.Add(“Horarios”);
//Navegando entre os registros para fazer o agrupamento
foreach (DataRowView row in dv)
{
string horarioInicio = row["hs_inicial"].ToString();
string horarioFinal = row["hs_final"].ToString();
string hor_inicio = horarioInicio.Left(2) + “:” + horarioInicio.Right(2);
string hor_final = horarioFinal.Left(2) + “:” + horarioFinal.Right(2);
string diaSemana = row["diasemana"].ToString();
//condição de criação de linha para identificar alinha que será agrupada
if (row["n_completo_ds"].ToString() != ultimaDisc || row["n_completo_cr"].ToString() != ultimoCurso)
{
dtPronto.Rows.Add(row["c_ident_cr"].ToString(), row["n_completo_ds"].ToString(), row["n_completo_cr"].ToString(), row["turno"].ToString(), diaSemana + ” – ” + hor_inicio + ” às ” + hor_final);
}
else //Condição de agrupamento neste caso os horários estão sendo agrupados
{
dtPronto.Rows[dtPronto.Rows.Count - 1]["Horarios"] += “<br>” + diaSemana + ” – ” + hor_inicio + ” às ” + hor_final;
}
//Setando as váriáves para comparar no laço
ultimaDisc = row["n_completo_ds"].ToString();
ultimoCurso = row["n_completo_cr"].ToString();
}
return dtPronto;
}