2012-04-20 19 views
5

Perdóname si esta pregunta ya ha sido formulada y respondida. Acabo de pasar un tiempo buscando mi pregunta y parece que no puedo encontrarla.¿Cómo convierto nchar en cadena en C#?

De todos modos, estoy trabajando en Visual Studio 2010 y MS SQL Server. Tengo la base de datos hecha y ahora estoy trabajando en el material de front-end. De todos modos, a través de mi búsqueda, he visto que nchar no es un tipo de datos C#, lo cual está bien, pero no parece convertirlo en una cadena para mí.

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

Esa es la parte que me está dando un error. Está diciendo "No se puede convertir implícitamente 'cadena' a 'int'".

¿Alguien sabe una forma de evitar el problema nchar completo?

¡Gracias de antemano!

Ellie

[EDIT]: Así que aquí está todo el método ... aunque no creo que cualquier otra cosa aquí que realmente va a ayudar.

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

intente utilizar string s = Convert.ToString (reader ["SerialNum"]); ? –

+6

El código de muestra no parece ser la fuente del error. No hay 'int' en esa línea en absoluto. ¿Esa es toda la línea? ¿Podría publicar una muestra más grande, por contexto? – phoog

+0

Parece un mensaje de base de datos. es tu consulta tratando de lanzar astring como un int? –

Respuesta

1

Usted está tratando de asignar el valor que recibió de un int. Verifique la definición de la variable/propiedad a la que está asignando el valor.

3

probablemente tendrá que usar reader.GetString(ordinal)

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

Si el valor puede ser nulo en el resultado, utilice reader.IsDbNull (ordinal)

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

El error no tiene nada que ver con esta respuesta. ¿Por qué está esto votado? –

+0

¡No fui yo! Traté de votarte el tuyo. –

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

pero es probable que esté asignando a una variable int. Más código por favor.

+0

Intenté eso, todavía no funcionó ... Y agregué más código en la parte superior, aunque dudo que realmente ayude. –

+0

Estoy bastante seguro de que CurrentRow.serialNum es del tipo int. También use propiedades y no campos públicos, y si serialNum es de hecho propiedad, use la convención apropiada. (Esto no tiene nada que ver con tu problema, pero es una buena práctica) – Stilgar

0

Aquí hay algunos errores.

  1. Estás emitiendo dos veces. No hay necesidad.
  2. C# no es un idioma weakly typed, por lo que debe poner el resultado de su conversión en otra cadena.

Así que trate de cualquiera de los siguientes

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

o

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

espero que esto ayude.

+1

Sí, estoy molesto por el casting dos veces, también, pero así es como lo hace mi jefe, y como soy el nuevo aquí, solo tengo que da un paso adelante a veces ... pero estoy diciendo que he hecho esto mil veces antes con todas las otras tablas ... Solo tiene un problema con este porque es un nchar. Eso es algo que vale la pena notar. No digo cómo estoy haciendo todo esto, es la forma correcta de hacerlo, pero ha funcionado hasta ahora. –

+0

@HerNameIsEllie, mira la respuesta del agente-j anterior. SqlDataReader entiende nchar y sabe cómo lanzarlo. – curiousdork

0

¿Es esa la línea completa del código que le da un error? El error indica que está intentando convertir a un int.

0

La línea completa es CurrentRow.serialNum = Convert.ToString (lector ....);

Apuesto CurrentRow.serialNum es un número entero.

Si eso es correcto, dependiendo del tipo de los datos en el lector, una de ellas será su solución:

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

Esto puede no ser un problema de tipo de datos, sino más bien un problema NULO. Verifique si serialNum puede ser NULL. Si es así, es posible que necesite utilizar GetSqlString u otro código que pueda manejar el caso NULL.

Cuestiones relacionadas