2012-04-20 15 views
5

Perdonami se questa domanda è già stata fatta e ha risposto. Ho appena passato un po 'di tempo a cercare la mia domanda, e non riesco a trovarla.Come posso convertire nchar in stringa in C#?

In ogni caso, sto lavorando in Visual Studio 2010 e MS SQL Server. Ho creato il database e ora sto lavorando solo sul front end. Comunque, attraverso la mia ricerca, ho visto che nchar non è un tipo di dati C#, che va bene, ma non sembrerà convertirlo in una stringa per me.

Convert.ToString(reader["SerialNum"].ToString().Trim()); 

Questa è la parte che mi sta dando un errore. Sta dicendo "Impossibile convertire implicitamente 'stringa' in 'int'."

Qualcuno conosce un modo per aggirare l'intero problema nchar?

Grazie in anticipo!

Ellie

[EDIT]: Quindi, ecco l'intero metodo ... anche se non credo che qualsiasi altra cosa qui di vero aiuto.

private Row PopulateRow(SqlDataReader pReader) 
    { 
     Row CurrentRow = new Row(); 
     CurrentRow.sTransNum = Convert.ToInt32(reader["STransNum"].ToString().Trim()); 
     CurrentRow.serialNum = Convert.ToString(reader["SerialNum"].ToString().Trim()); 
     CurrentRow.itemTypeID = Convert.ToInt32(reader["ItemTypeID"].ToString().Trim()); 
     CurrentRow.fromLocation = Convert.ToInt32(reader["FromLocation"].ToString().Trim()); 
     CurrentRow.toLocation = Convert.ToInt32(reader["toLocation"].ToString().Trim()); 
     CurrentRow.units = Convert.ToInt32(reader["Units"].ToString().Trim()); 
     CurrentRow.serialMoveDate = Convert.ToDateTime(reader["SerialMoveDate"].ToString().Trim()); 
     CurrentRow.moveTypeID = Convert.ToInt32(reader["MoveTypeID"].ToString().Trim()); 
     CurrentKey.sTransNum = CurrentRow.sTransNum; 
     CurrentRow.CompleteState = "OK"; 
     return CurrentRow; 
    } 
+1

hai provato a utilizzare string s = Convert.ToString (reader ["SerialNum"]); ? –

+6

Il codice di esempio non sembra essere la fonte dell'errore. Non c'è niente di "int" in quella linea. È tutta la linea? Potresti postare un campione più grande, per contesto? – phoog

+0

Sembra un messaggio di database. la tua domanda sta cercando di trasmettere astring come int? –

risposta

1

Si sta tentando di assegnare il valore che hai ricevuto a un int. Controlla la definizione della variabile/proprietà a cui stai assegnando il valore.

3

Probabilmente dovrebbe utilizzare reader.GetString(ordinal)

reader.GetString(reader.GetOrdinal("SerialNum")) 

Se il valore può essere nullo nel risultato, utilizzare reader.IsDbNull (ordinale)

int ordinal = reader.GetOrdinal("SerialNum"); 
serial = reader.IsDbNull(ordinal) ? null : reader.GetString(ordinal); 
+0

L'errore non ha nulla a che fare con questa risposta. Perché questo è upvoted? –

+0

Non ero io! Ho provato a rinnegare il tuo. –

0
Convert.ToString(reader["SerialNum"]) 

ma probabilmente stai assegnando a una variabile int. Più codice per favore.

+0

L'ho provato, non funzionava ancora ... E ho aggiunto altro codice in alto, anche se dubito che sia davvero d'aiuto. –

+0

Sono abbastanza sicuro che CurrentRow.serialNum sia di tipo int. Utilizza anche le proprietà e non i campi pubblici e se serialNum è effettivamente proprietà usa la convenzione corretta. (Questo non ha nulla a che fare con il tuo problema, ma è una buona pratica) – Stilgar

0

Qui ci sono alcune cose che non vanno.

  1. Stai trasmettendo due volte. Non c'è bisogno.
  2. C# non è una lingua weakly typed, quindi è necessario inserire il risultato della conversione in un'altra stringa.

in modo da provare una delle seguenti

string strTmp = Convert.ToString(reader["SerialNum"]); 
strTmp = strTmp.Trim(); 

o

string strTmp = reader["SerialNum"].ToString().Trim(); 

Spero che questo aiuta.

+1

Sì, sono arrabbiato anche per il cast due volte, ma è così che lo fa il mio capo, e visto che sono il nuovo qui, devo solo passo a volte a volte ... ma sto dicendo che l'ho fatto mille volte prima con tutti gli altri tavoli .. Ha solo un problema con questo UNO perché è un nchar. È qualcosa che vale la pena notare. Non sto dicendo come sto facendo tutta questa cosa è il modo giusto per farlo, ma ha funzionato fino ad ora. –

+0

@HerNameIsEllie, guarda la risposta di agent-j sopra. SqlDataReader comprende nchar e sa come lanciarlo. – curiousdork

0

È la linea completa del codice che ti dà un errore? L'errore indica che stai cercando di convertire in un int.

0

L'intera riga è CurrentRow.serialNum = Convert.ToString (lettore ....);

Scommetto che CurrentRow.serialNum è un numero intero.

Se questo è corretto, a seconda del tipo di dati nel lettore, una di queste sarà la vostra soluzione:

CurrentRow.serialNum = Convert.ToInt32(reader["SerialNum"].ToString().Trim()); 
CurrentRow.serialNum = (int)reader["SerialNum"]; 
0

Questo potrebbe non essere un problema di tipo di dati, ma piuttosto un problema NULL. Verificare se serialNum può essere NULL. In tal caso, potrebbe essere necessario utilizzare GetSqlString o altro codice in grado di gestire il caso NULL.

Problemi correlati