| Pedro 的个人资料Pedro Carlos S. de Olive...照片日志列表 | 帮助 |
|
9月21日 Problem of Validating, CausesValidation and Form Close(Também em português: Problema com evento Validating, CausesValidation e fechar do formulário) Teaching a lesson in a Microsoft Learning class, I was demonstrating the use of the Validating event in a textbox and a button with CausesValidation property set to false (there is a question discussing that in the certification exam), and I wrote a simple code: Private Sub btnCancel_Click(...) Handles btnCancel.Click
MessageBox.Show("Cancel pressed")
End Sub
It worked as expected, and to end the demonstration I changed the code to: Private Sub btnCancel_Click(...) Handles btnCancel.Click
Me.Close()
End Sub
I forgot that I had this problem when I was programming a Windows Form applicaton some time ago. At that time, I simply decided to not use the Validating event and put all my validation code in the OK button. But now I was demonstrating this to students and could not admit that this is something we had to accept. So, with some search in the Internet, a little code and just a few changes, I present my solution to this problem. First, declare a private const in the Form: Private Const WM_CLOSE As Integer = CInt(&H10) Then, override the WndProc method: Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_CLOSE Then
Dim formControl As Control
For Each formControl In Me.Controls
formControl.CausesValidation = False
Next
End If
MyBase.WndProc(m)
End Sub
And that's all. The Cancel button can be clicked and the Close method will execute without the validation stop. Good luck. Pedro de Oliveira More information: MCAD/MCSD: Error Handling for the User Interface 9月5日 If you work with Oracle and .NET, beware of parameter order(Também em português: Se você usa Oracle e .NET, cuidado com a ordem dos parâmetros)
A common mistake when you work with Oracle is to declare parameters out of order when using Oracle in a .NET application.
For example, let's use the following parametrized query:
SELECT NAME, AGE
FROM EMPLOYEES WHERE NAME = :p_name AND AGE = :p_age The input parameters p_name and p_age can be declared in the following order:
cmd.Parameters.Add("p_age", OracleType.Int32).Value = 18
cmd.Parameters.Add("p_name", OracleType.VarChar, 80).Value = "Pedro" Against the expectation, this code result in error, because p_name was declared in SQL before p_age. Oracle put the value 18 in the first parameter (in this case, p_name) and the value "Pedro" in the second parameter (p_age). As "Pedro" cannot be converted into integer, an error occurs.
To correct this code, you have to use the same order as used in SQL, declaring the parameters like this:
cmd.Parameters.Add("p_name", OracleType.VarChar, 80).Value = "Pedro"
cmd.Parameters.Add("p_age", OracleType.Int32).Value = 18 This little mistake can cause serious problems if parameters are of compatible types, because incorrect (switched) information could be saved, therefore causing inconsistent data.
In resume, if you have to use Oracle parameters, be careful with parameter order.
Nice programming.
Pedro Carlos S. de Oliveira MCT (MCSD .NET/VS6) Rio de Janeiro/Brazil 9月2日 Diferenças entre Session e ViewStateLi num blog uma dúvida sobre a diferença entre Session vs ViewState e, em resumo, vou tentar mostrar o que são e quais são as diferenças entre estes recursos de manutenção de estado. O Session é o mais conhecido, pois existe desde o ASP. Este é um objeto que armazena pares do tipo chave/valor. Chave é um nome (string) de acesso e o valor é qualquer objeto (Object). O armazenamento destes pares é feito no servidor e, na sua forma padrão (default), consome memória. O Session é um objeto individual, i.e., associado a apenas um usuário usando a aplicação web. Sendo individual e consumindo memória, este objeto torna-se perigoso para a escalabilidade da aplicação web, i.e., o suporte ao crescimento no número de usuários (que causará um aumento no consumo de memória no servidor). O ViewState é um objeto que foi inserido no ASP.NET, junto com os recursos de manutenção de estado do WebForm (página ASPX). Este objeto também armazena pares do tipo chave/valor, contudo diferente do Session, o valor não pode ser um objeto (pelo menos, em seu estado original). Apenas tipos simples (números e strings) podem ser armazenados. Objetos serializáveis também podem ser armazenados em ViewState, mas apenas porque ao ser serializado o objeto é transformado em XML, que é uma string. O ViewState também é um objeto individual, mas diferente do Session não consome recursos (memória ou outro) no servidor. O conteúdo é acrescentado à página gerada num campo hidden do WebForm ( __VIEWSTATE ), encriptado e num formato compacto. Isto faz com que a escalabilidade não seja prejudicada, mas o tamanho da página gerada fica maior, o que aumenta o tempo de carga da página. Em conexões lentas, isto pode ser um problema. Acredito que com estas informações fica mais fácil entender as diferenças entre estes objetos. Boa programação.
Pedro Carlos S. de Oliveira 9月1日 Webservice para consulta de CEP (Brasil)Usando a página dos Correios para consultar o CEP de um endereço, notei no fim da página de resultados da busca um anúncio que oferecia a possibilidade de consultar o CEP no Microsoft Office 2003. Como era um anúncio da própria empresa de Correios, resolvi testar e, como esperado, consegui usar a partir do Office.
A surpresa veio quando notei que este recurso usado Office era na verdade um Webservice criado em .NET (extensão .aspx). Comentei isto em sala de aula e um aluno, Thiago Fialho, se interessou e, com algum trabalho e pesquisa, dissecou o funcionamento deste Webservice e seus resultados estão em seu blog do TheSpoke: http://thespoke.net/blogs/thiagocf/archive/2005/08/31/353202.aspx.
Vale a pena conferir e usar em suas aplicações .NET. 8月22日 Comparando a segurança no Java e no .NET
O gráfico acima já diz tudo, mas permita-me acrescentar um pouco de contexto. Nathaneal Paul e David Evans, dois pesquisadores do Departamento de Ciência da Computação da University of Virginia, nos Estados Unidos, concluíram um estudo chamado "Comparing Java and .NET Security: Lessons Learned and Missed". O gráfico é a Figura 1 do documento e compara o número de grandes vulnerabilidades de segurança na Máquina Virtual Java e no CLR desde o lançamento oficial de cada um, em Janeiro de 1996 e Janeiro de 2002, respectivamente. Para fazer o download do estudo original:
Fonte: Blog do Only4Gurus (http://www.only4gurus.com.br/) 8月4日 Globalization para português do Brasil (pt-BR) - Parte 2Continuando o assunto de configurações regionais do Brasil, vou mostrar outras formas de aplicar formatos regionais, independente do sistema do servidor (ou do usuário).
Em ASP.NET, caso fosse necessário aplicar a regionalização para português do Brasil em apenas uma página, poderíamos usar a diretiva Page:
<%@ Page UICulture="pt-BR" Culture="pt-BR"...%>
E, independente de ser uma aplicação ASP.NET, podemos usar os namespaces System.Globalization e System.Threading:
' Visual Basic
' Importar estes namespaces no início do código. Imports System.Globalization Imports System.Threading ' No código:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("pt-BR") Thread.CurrentThread.CurrentUICulture = New CultureInfo("pt-BR") // C#
// Importar estes namespaces no início do código. using System.Globalization; using System.Threading; // No código:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("pt-BR"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR"); Culture determina a cultura usada em funções dependentes da cultura como Date e Currency. Portanto, é usada na formatação de datas e números. UICulture determina a linguagem que será usada na carga de arquivos de recursos.
Recursos
Arquivos de recursos (resources) são usados para armazenar dados embutidos como strings ou imagens, que podem ser recuperados durante a execução e mostrados na tela. O Resource Management é um recurso do framework .NET usado para extrair elementos do código e armazená-los com chaves em arquivos de recursos. Na execução, a classe ResourceManager é usada para, baseado na chave, recuperar o item baseado na cultura correta. Recursos podem ser armazenados como arquivos independentes ou como parte do assembly.
ResourceWriter e resgen.exe podem ser usados para criar arquivos .resources. Para incluir arquivos .resources dentro de um assembly, use a opção de compilação relacionada ou Al.exe.
Para criar um arquivo texto de recursos:
Para gerar o arquivo .resources, inicie o Command Prompt do Visual Studio .Net e use o executável resgen:
Estes comandos irão gerar o arquivo .resources.
Numa página ASP.NET de teste:
' Visual Basic
Dim cultura As String = Request.Form("cultura") Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultura) Thread.CurrentThread.CurrentUICulture = New CultureInfo(cultura) Dim rm As ResourceManager = ResourceManager.CreateFileBasedResourceManager ("resource", Server.MapPath("resources") & Path.DirectorySeparatorChar, Nothing) Response.Write( rm.GetString("Msg")) // C#
string cultura = Request.Form("cultura"); Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultura); Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultura); ResourceManager rm = ResourceManager.CreateFileBasedResourceManager ("resource", Server.MapPath("resources") + Path.DirectorySeparatorChar, null); Response.Write( rm.GetString("Msg")); O código irá mostrar o conteúdo baseado no valor de uma entrada chamada "cultura".
Caso você esteja usando ASP.NET e necessite de um framework de localização mais robusto, pode usar o Enterprise Localization Toolkit:
Boa programação. Publicação via FTP no VS .NET 2003Para quem já precisou publicar via FTP os arquivos que desenvolveu no Visual Studio .NET 2003, sabe que esta é uma tarefa ingrata (ou pelo menos trabalhosa). Não existe recurso nativo e usar um programa externo é pouco prático, principalmente para quem tem pouca experiência (selecionar os arquivos que devem ser distribuídos, atualizar apenas o que foi alterado, ...). É aí que entra uma aplicação (que também tem uma add-in para o VS.NET) super interessante que facilita muito o trabalho de publicação via FTP: Unleash It. Ela é gratuita e está disponível em http://www.eworldui.net/unleashit/. Sua configuração poderia ser mais intuitiva, mas uma vez gravados os dados do servidor de destino, seu uso se restringe a pressionar um botão. OK, para você já está usando o Visual Studio 2005 esta dica não é útil, mas acredito que muitos ainda irão usar o VS.NET 2003 durante algum tempo e, para vocês que se encontram neste caso, esta é uma ferramenta quase indispensável (se você não usa FTP...). |
|
|||
|
|