No se puede convertir el objeto del tipo 'System.DBNull' al tipo 'System.String'. Error [duplicado]
Frecuentes
Visto 11,492 veces
1
Sigo recibiendo este error porque VendorID es nulo para ese registro. He visto que esta pregunta se ha hecho un par de veces y parece que debería hacer una verificación para ver si es nulo antes de convertirlo e ingresarlo en el dbtable, pero no estoy seguro de cómo hacerlo.
public static PartOrder findPartOrder(string orderNo)
{
PartOrder aPartOrder = new PartOrder();
OleDbDataAdapter myAdapter = new OleDbDataAdapter();
if (aConnection.State == ConnectionState.Closed)
aConnection.Open();
OleDbCommand cmd = aConnection.CreateCommand();
OleDbDataReader dbReader = null;
cmd.CommandText = "SELECT * FROM PartOrder WHERE OrderNo = '" + orderNo + "'";
dbReader = cmd.ExecuteReader();
while (dbReader.Read())
{
aPartOrder.OrderNo = (string)dbReader.GetValue(0);
aPartOrder.Length = (string)dbReader.GetValue(1);
aPartOrder.Finish = (string)dbReader.GetValue(2);
aPartOrder.Cost = (string)dbReader.GetValue(3);
aPartOrder.PartDrawingNo = (string)dbReader.GetValue(4);
aPartOrder.VendorId = (string)dbReader.GetValue(5);
aPartOrder.ShopId = (string)dbReader.GetValue(6);
aPartOrder.Completed = (string)dbReader.GetValue(7);
}
dbReader.Close();
return aPartOrder;
}
De nuevo, la línea "aPartOrder.VendorId = (string)dbReader.GetValue(5);" obtiene el error porque VendorId es nulo.
4 Respuestas
3
para esta línea en particular intente esto:
aPartOrder.VendorId = dbReader.GetValue(5)==DBNull?"":dbReader.GetValue(5).value;
mejor sería escribir una función auxiliar:
private static string MyToString(object o)
{
if(o == DBNull.Value || o == null)
return "";
return o.ToString();
}
y utilícelo:
aPartOrder.VendorId = MyToString(dbReader.GetValue(5));
contestado el 11 de mayo de 12 a las 07:05
1
Respuesta de una línea
aPartOrder.VendorId = dbReader.IsDBNull(5) ? "" :(string)dbReader.GetValue(5);
contestado el 11 de mayo de 12 a las 06:05
0
dbReader.GetValue(5).HasValue ? dbReader.GetValue(5).ToString() : String.Empty
contestado el 11 de mayo de 12 a las 06:05
0
Utilice el OleDbDataReader.IsDBNull(ordinal)
para verificar el valor del campo.
if(!dbReader.IsDBNull(5))
aPartOrder.VendorId = dbReader.GetString(5);
Sugerencia: use siempre parámetros/instrucciones SQL precompiladas para evitar Inyección SQL ataque.
cmd.CommandText = "SELECT * FROM PartOrder WHERE OrderNo = @OrderNo";
cmd.Parameters.Add("@OrderNo",System.Data.OleDb.OleDbType.VarChar,20).Value=orderNo;
dbReader = cmd.ExecuteReader();
contestado el 11 de mayo de 12 a las 06:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# sql arraylist or haz tu propia pregunta.