Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    IDataReader problema esposizione campi decimal, eliminazione virgola

    Ciao,

    Ho scritto una piccola applicazione che permette di esportare dei dati in vari formati (excel, testo, ecc) a partire da un odbc di sistema definito.
    Nella mia applicazione ho una classe che esegue la connessione al database via odbc, e non conoscendo a priori il database sorgente ho utilizzato una generica connessione ODBCConnection ritornando un generico ODBCDataReader.
    La classe che esporta riceve come sorgente un IDataReader, sul quale ciclo poi per scrivere il mio output (stampo un idr[j].ToString(), dove idr è il mio datareader).
    Ora, il mio problema è che se l'odbc è di un database db2 9.5, i campi decimal del tipo:

    95.042

    vengono stampati come 95042

    Non è un problema della classe di visualizzazione, tant'è che se stampo idr[j].ToString() con un messagebox vedo sempre 95042, mentre se scelgo come sorgente l'odbc di un database access i campi decimal vengono esposti correttamente.

    C'è un modo per aggirare/risolvere il problema?

    Ciao e grazie,

    Alessandro.
    xxx

  2. #2
    Giusto per,

    La medesima query di prova lanciata da un banale vbscript che utilizza lo stesso dsn (la stringa di connessione è identica a quella utilizzata nella mia classe) di sistema funziona perfettamente:

    codice:
    dim conn
    
    Set conn = CreateObject("ADODB.Connection")
    
    conn.CursorLocation = 3 'adUseClient
    
    conn.open="DSN=MYDB2DSN;UID=*****;PWD=*****;"
    
    If conn.state=1 Then
    	dim rs
    	set rs = CreateObject("ADODB.Recordset")
    
    	rs.open "select campo_importo from schema.tabella where myid in (61966122)", conn
    	
    	msgbox rs(0)
    
    	rs.close
    	set rs=nothing
    else
    	msgbox "Connessione chiusa.."	
    end if
    
    conn.close
    set conn = nothing
    xxx

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Probabilmente il separatore decimale non è il "." ma bensì la ",". Per cui un numero nel formato 95.042, una volta convertito in un numero, diventa giustamente 95042 in quanto il punto è un separatore delle migliaia.

    Prova a cambiare il CultureInfo del Thread corrente, ad esempio:

    codice:
     System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US")
    oppure brutalmente ( ) fai un Replace nella stringa del "." con la ",".
    Sbagliare è umano, perseverare è diabolico.

  4. #4
    Ciao e innanzitutto grazie per la tua risposta.

    Ho provato a cambiare il cultureinfo come hai suggerito ma come temevo non è cambiato nulla, sia con en-EN (culture info del db) sia con it-IT (cultureinfo della mia macchina).

    Il problema è che il separatore non c'è proprio, virgola o punto che sia. Quando esporto esporto i dati in excel, csv, txt e preventivamente faccio un ToString di tutti i campi (in excel preformatto anche le colonne), ma di separatore decimale neanche l'ombra. Come dicevo sopra neanche visualizzando il record con un messagebox c'è separatore.
    xxx

  5. #5
    up
    xxx

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.