Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    66

    [C#] Booleano da vb a c#

    Salve,
    devo tradurre delle librerie d vb a c#, e mi sono imbattuto in questo problema, che né i tool di conversione, né io riusciamo ad aggirare.
    Questa è la parte in vb:
    codice:
        Public Function isLoginDuplicate(ByVal login As String) As Long        
    Dim strSql As String       
    Dim command As OleDbCommand        
    strSql = "SELECT count(*) FROM " & SchemaName + TableName       
    strSql = strSql & " WHERE loginname = '" & login.ToUpper & "'"       
    strSql = strSql & " and key <> " & Key       
    command = New OleDbCommand(strSql, dbConnection.connect())        
    
    If (command.ExecuteScalar()) 
     Then         
       Return True       
     Else         
       Return False       
    End If
    E questa è la relativa conversione in C#:
    codice:
    		public long isLoginDuplicate(string login) 		
    {  			
    string strSql = null; 			
    OleDbCommand command = null;  			
    strSql = "SELECT count(*) FROM " + SchemaName + TableName; 			
    strSql = strSql + " WHERE loginname = '" + login.ToUpper() + "'"; 			
    strSql = strSql + " and key <> " + Key; 			
    command = new OleDbCommand(strSql, dbConnection.connect());  			
    
    if ((command.ExecuteScalar())) { 				
     return true; 			
    } else { 				
     return false; 			
    }  		
    }
    Però mi dà questo errore: CS0266: Impossibile convertire in modo implicito il tipo 'object' in 'bool'. È presente una conversione esplicita. Probabilmente manca un cast.
    L'errore è riportato alle righe sottolineate...
    Se manca un cast, dove e come lo aggiungo?

    Grazie in anticipo

  2. #2
    Stai facendo una SELECT count, per cui il risultato dell'operazione sarà un intero; fai il cast a int del risultato di ExecuteScalar(), a quel punto ci sarà la conversione implicita a bool.

    Per inciso, quell'if si può rimuovere in blocco: basta fare
    codice:
    return ((int)command.ExecuteScalar())!=0;
    P.S.: query con concantenazione di stringhe... no buono...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    66
    Grazie del consiglio, ma inserendo quello che mi dici tu mi dà questo errore:
    CS0029: Impossibile convertire implicitamente il tipo 'bool' in 'long'.

  4. #4
    Ma chi è che ha scritto quella funzione? Non ha senso avere come tipo restituito Long e restituire un booleano...
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    66
    E' quello che mi son chiesto subito anch'io
    Io lavoro qua da poco e devo revisionare questa applicazione... s hai qualche consiglio sono nelle tue mani

  6. #6
    Guarda, la soluzione "vigliacca" è restituire -1 al posto di true e 0 al posto di false, e dovresti essere ragionevolmente sicuro di non rompere niente. D'altra parte la soluzione "giusta" è cambiare il tipo restituito a bool e verificare se non saltino fuori errori.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    66
    la soluzione "giusta" l'ho già provata e non va... quell'altra provo ora...

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    66
    Niente da fare... Non ne esco vivo...

  9. #9
    Per entrambi i tentativi: "non va"=?
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    66
    purtroopo sì...

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.