INSERIR DATA NO PROVEDOR

LEANDRO 13/09/2012 18:49:36
#409637
Boa Noite a todos.

Desenvolvi uma aplicação para um cliente, contratamos um servidor, e desenvolvi a aplicação utilizando a base de dados que esta nesse provedor, a aplicação roda normal, hoje fui colocar a aplicação nesse provedor, e quando fui testa-la e em todos os lugares que, carrego, insiro e altero uma data me da um erro

Server Error in [ô]/[ô] Application.

String was not recognized as a valid DateTime.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.FormatException: String was not recognized as a valid DateTime.

Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:
[FormatException: String was not recognized as a valid DateTime.]
System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles) +3593382
System.Convert.ToDateTime(String value) +83
Dimas.PAG.Receber.imgInsert_Click(Object sender, ImageClickEventArgs e) in C:\Users\leandro.gonsales\Documents\Visual Studio 2010\Projects\Dimas.PAG\Dimas.PAG\Receber.aspx.cs:447
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +115
System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +120
System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272


Conversei com a pessoa responsavel perguntando qual o formato da data no servidor dele e ele me falou

Normalmente o padrão Americano mm/dd/aa

Alguem poderia me ajudar nessa situação?

Aqui esta o codigo aonde insiro um registro que tem data.

protected void imgInsert_Click(object sender, ImageClickEventArgs e)
{
if (VerificarBranco())
{
RECEBER receber = (this.Id > 0 ? ReceberServicos.Carregar(int.Parse(txtCodigo.Text)) : new RECEBER());
receber.REC_DESCONTO = decimal.Parse(txtDesconto.Text);
receber.REC_EMISSAO = Convert.ToDateTime(txtDtEmi.Text.Trim());
receber.REC_VALOR = decimal.Parse(txtValor.Text);
receber.REC_VENCIMENTO = Convert.ToDateTime(txtDtVenc.Text.Trim());
receber.REC_VALOR_PREVISTO = Convert.ToDecimal([Ô]0,00[Ô]); // decimal.Parse(txtValorTotalChip.Text);
receber.REC_STATUS = [Ô]O[Ô];
receber.CLI_ID_CLIENTE = int.Parse(ddlCliente.SelectedItem.Value);
try
{
ReceberServicos.Gravar(receber);
Alerta([Ô]Registro salvo com sucesso[Ô]);

RECEBER itemreceber = ReceberServicos.CarregarRecId(Convert.ToInt16(ddlCliente.SelectedItem.Value), Convert.ToDateTime(txtDtEmi.Text.Trim()), Convert.ToDateTime(txtDtVenc.Text.Trim()));
txtCodigo.Text = itemreceber.REC_ID_RECEBER.ToString();
CarregarGrid();
// LimparCampos();
}
catch (Exception ex)
{
Alerta([Ô]Erro ao salvar o registro.[Ô] + ex.InnerException.Message);
}
}
KERPLUNK 14/09/2012 09:04:37
#409660
Esse é um dos maiores problemas em se usar conexões remotas com aplicações desktop. As configurações regionais da máquina cliente e da máquina servidor, são diferentes e só tem duas alternativas: ou altera a máquina cliente para ficar com as mesmas configurações regionais do servidor, ou faz uma gambiarra para inserir dados com o formato que o servidor usa. Esse é mais um dos motivos porque eu enfatizo tanto o uso de aplicações web sobre aplicações desktop
LEANDRO 14/09/2012 09:28:48
#409663
Minha aplicação é Web.

Porem utilizo um provedor e não o IIS.

Como faria uma gambiarra em relação a isso?

Obrigado
OCELOT 14/09/2012 09:37:58
#409666
O problema parece ser no Convert.ToDateTime, quando você usa ele do jeito que você colocou ele vai por padrão pegar a configuração do sistema operacional, porém existem formas de modificar este comportamento.

A primeira delas é usando um IFormatProvider direto no Convert.ToDateTime, por exemplo, digamos que seu PC está configurado para o formato americano, então o seguinte código daria erro

var data = Convert.ToDateTime([Ô]30/01/2012[Ô]);

Para corrigir isso e usar a data no formato brasileiro independente da configuração do sistema pode-se fazer

var data = Convert.ToDateTime([Ô]30/01/2012, System.Globalization.CultureInfo.GetCultureInfo([Ô]pt-br[Ô]).DateTimeFormat);

Agora no caso seja um projeto Asp.Net existe a possibilidade de definir a cultura pelo Web.Config na tag globalization, exemplo
<configuration>
<system.web>
<globalization culture=[Ô]pt-br[Ô] uiCulture=[Ô]pt-br[Ô]/>
</system.web>
</configuration>


Outra forma ainda é mudando a cultura diretamente no Thread, útil por exemplo para Windows Forms, por exemplo no inicio do programa você colocar

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo([Ô]pt-br[Ô]);

Com estas duas formas você pode usar normalmente o Convert.ToDateTime que ele vai pegar a configuração da cultura definida no web.config ou no thread
Tópico encerrado , respostas não são mais permitidas