Como usar o mesmo banco de dados e mesmo programa para dois locais diferentes em .NET

votos
3

Eu tenho um programa C # que usa um SQL Server database.I já estou usando-o em um país que usa. como separador decimal. Agora eu quero usá-lo em outro país que usa, como separador decimal.

em C # existe alguma configuração de nível de aplicativo que eu posso mudar ou escrever algum código para que eu possa usar o mesmo banco de dados e o mesmo programa? ou eu tenho que mudar todo o meu código para lidar com este novo separador decimal?

Eu não sei como isso works.Basically Eu acho que não haveria problemas em meu SQL Queries. exemplo, dizer uma das minhas declarações existentes é

insert into tblproducts(productId,Price) values('A12',24.10)

agora no novo país se tornará

insert into tblproducts(productId,Price) values('A12',24,10)

isso irá gerar um erro

por isso que eu tenho que mudar o código inteiro para lidar com esta situação?

Obrigado

Publicado 09/12/2008 em 18:17
fonte usuário
Em outras línguas...                            


3 respostas

votos
1

Se você construiu a consulta usando concatenação, usar parâmetros em vez. Então, ao invés de escrever:

 var query = "insert into tblproducts(productId,Price) values('" + article + "','"
    + price + ')';

usar OleDbParameters :

 var query = "insert into tblproducts(productId,Price) values(?,?)"
 var cmd = new OleDbCommand(query, connection);
 cmd.Parameters.Add("@article", OleDbType.VarChar).Value = article;
 cmd.Parameters.Add("@price", OleDbType.Single).Value = price;

Isto vai poupar um monte de problemas, incluindo problemas de localização.

Respondeu 09/12/2008 em 18:46
fonte usuário

votos
0

Em seu arquivo Global.asax.vb, você pode definir a cultura do carregamento da página atual:

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture

Isso fará com que todo o trabalho funcionalidade cultura-aware bem. por exemplo, (5000,25) .ToString () irá usar vírgulas vs. períodos, dependendo qualquer cultura que você definir. Além disso, lendo um entradas do usuário em um tipo numérico será analisado de acordo com suas regras de cultura. Datas irá ser apresentado correctamente (12/9/08 vs 9/12/08). Você começa tudo o que basicamente de graça.

Isto, obviamente, causa problemas quando se fala de outros sistemas que estão esperando tudo na mesma cultura. Para resolver isso, você escreve as suas consultas com a cultura invariável:

(5000.25).ToString(CultureInfo.InvariantCulture) 

Isto irá definir explicitamente que a saída para algo que Mysql pode obter junto com.

Nota: se você tem uma camada de dados adequada e você passa tipos numéricos para ele, você provavelmente pode evitar um monte de esta confusão.

Respondeu 09/12/2008 em 18:46
fonte usuário

votos
0

você pode fazer um par de coisas para corrigir isso.

em primeiro lugar, se você estiver tomando valores na partir da interface, então você está lançando esses valores para um decimal. Decimal.Parse é uma função que depende da cultura e vai utilizar a cultura actual a analisar valores. Portanto, se o CurrentCulture usa vírgulas como separadores decimais em seguida, o seu elenco vai funcionar corretamente. Então, quando você saída o valor de sua variável, você pode especificar o formato Decimal.ToString sempre saída usando um ponto como separador.

Oh, esqueceu de acrescentar. Você também pode mudar a sua análise para indicar moeda, que permite vírgulas, bem como $ sinais. por exemplo: Decimal.Parse (quantidade, NumberStyles.Currency)

Respondeu 09/12/2008 em 18:44
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more