| Mario Duzioni |
OleDbParameter, Decimal e localizzazione
Ho un problema di cui ho trovato diversi risconti in rete ma nessuna risposta.
Utilizzando OleDbType.Decimal con un OleDbParameter, sembrerebbe che la localizzazione non venga più gestita in automatico (come invece avviene, per esempio, con Date, Single, ecc). Tanto per capirci, specificando 2.5 come valore del parametro, su un sistema con regional setting impostato su italiano, quel 2.5 "diventa" 25. Qualcuno ha già riscontrato il problema? Ho letto in diversi post che potrebbe trattarsi di un bug, ma mi sembra davvero molto improbabile che sia sfuggito per così tanti anni. Se serve posto del codice di esempio. Grazie! Mario |
| Andrea Romeo |
Re: OleDbParameter, Decimal e localizzazione
Ciao Mario ,
Riesci a postare il codice di esempio ? |
| Mario Duzioni |
Re: OleDbParameter, Decimal e localizzazione
Ciao Andrea!
Eccolo, anche se probabilmente risulterà poco leggibile... :-( Per farlo girare serve un file "Export.xls" vuoto nella cartella dell'eseguibile. Grazie! using System; using System.Data.OleDb; namespace DecimalTroubleshooting { class Program { static void Main(string[] args) { string fileName = "Export.xls"; using (OleDbConnection cn = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES;\"", fileName))) { try { using (OleDbCommand cmd = new OleDbCommand()) { cmd.Connection = cn; cn.Open(); cmd.CommandText = "CREATE TABLE [ExportSheet] ( [Field1] decimal (18,2) NULL, [Field2] currency null )"; cmd.ExecuteNonQuery(); Console.WriteLine("Foglio creato"); cmd.CommandText = "INSERT INTO [ExportSheet] ( Field1, Field2 ) VALUES ( @Field1, @Field2 )"; OleDbParameter param1 = new OleDbParameter("@Field1", OleDbType.Decimal); param1.Value = 1234.56M; cmd.Parameters.Add(param1); OleDbParameter param2 = new OleDbParameter("@Field2", OleDbType.Currency); param2.Value = 1234.56M; cmd.Parameters.Add(param2); cmd.ExecuteNonQuery(); Console.WriteLine("Operazione completata."); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { if (cn != null && cn.State == System.Data.ConnectionState.Open) { cn.Close(); } } } Console.ReadLine(); System.Diagnostics.Process.Start(fileName); } } } |
| Andrea Romeo |
Re: OleDbParameter, Decimal e localizzazione
Ciao. avevo capito che avessi problemi con access :D !Deve essere qualche impostazione di excel. Ti direi se non hai particolari esegigenze di utilizzare XML speadsheet (http://msdn.microsoft.com/en-us/library/aa140066(office.10).aspx ) puoi gestire facilmente la formattazioni delle celle direttamente dal codice xml. Fammi sapere se come soluzione può andarti bene .
|
| Mario Duzioni |
Re: OleDbParameter, Decimal e localizzazione
No, è un problema che riguarda l'utilizzo di OleDbParameter in abbinamento all'OleDbType.Decimal.
Un workaround immediato è quello che indico implicitamente nel codice, cioè utilizzare OleDbType.Currency per i Decimal, ma ho la necessità (per alcuni motivi) di sapere se si tratta di un bug di OleDbParameter o di un mio errore nell'utilizzo. Grazie, ciao! Mario |