Problema al actualizar un campo Float

28/07/2005 - 11:16 por Javier | Informe spam
Hola:
Estoy trabajando con SQL Server CE y tengo un problema a la hora de
actualizar una fila que es de tipo Float. Creo que el problema esta
relacionada con el hecho de que el emulador de Pocket PC q utilizo con Visual
Studio se supone que esta en cultura inglesa, y por lo tanto representa los
valores float con un . mientras que en la española se hace con un ,
Total, que tengo estos 2 fragmentos de codigo, para la insercion y para la
actualizacion y mientras la insercion funciona perfectamente la actualizacion
no:

SqlCeCommand comandoSQL =
new SqlCeCommand("INSERT INTO Articulos (Id_Articulo, Nombre, Stock,
NombreProveedor, PrecioActual) VALUES (?, ?, ?, ?, ?)");

comandoSQL.Parameters.Add(new SqlCeParameter("Id_Articulo", SqlDbType.Int));
comandoSQL.Parameters.Add(new SqlCeParameter("Nombre", SqlDbType.NVarChar,
100));
comandoSQL.Parameters.Add(new SqlCeParameter("Stock", SqlDbType.Int));
comandoSQL.Parameters.Add(new SqlCeParameter("NombreProveedor",
SqlDbType.NVarChar, 200));
comandoSQL.Parameters.Add(new SqlCeParameter("PrecioActual",
SqlDbType.Float));

comandoSQL.Parameters["Id_Articulo"].Value = id_Articulo;
comandoSQL.Parameters["Nombre"].Value = nombre;
comandoSQL.Parameters["Stock"].Value = stock;
comandoSQL.Parameters["NombreProveedor"].Value = nombreProveedor;
comandoSQL.Parameters["PrecioActual"].Value = precioActual;


Esa es la inserción y la actualización es asi:
SqlCeCommand comandoSQL = new SqlCeCommand("UPDATE Articulos SET Nombre = ?,
Stock = ?, NombreProveedor = ?, PrecioActual = ? WHERE Id_Articulo = ?");
comandoSQL.Parameters.Add(new SqlCeParameter("Id_Articulo", SqlDbType.Int));
comandoSQL.Parameters.Add(new SqlCeParameter("Nombre", SqlDbType.NVarChar,
100));
comandoSQL.Parameters.Add(new SqlCeParameter("Stock", SqlDbType.Int));
comandoSQL.Parameters.Add(new SqlCeParameter("NombreProveedor",
SqlDbType.NVarChar, 200));
comandoSQL.Parameters.Add(new SqlCeParameter("PrecioActual",
SqlDbType.Float));

comandoSQL.Parameters["Id_Articulo"].Value = id_Articulo;
comandoSQL.Parameters["Nombre"].Value = nombre;
comandoSQL.Parameters["Stock"].Value = stock;
comandoSQL.Parameters["NombreProveedor"].Value = nombreProveedor;
comandoSQL.Parameters["PrecioActual"].Value = precioActual;


Total, que aunque el codigo sea practicamente igual, cuando ejecuto la
inserción todo va perfecto pero con la actualización me salta esta excepcion
al hacer el tipico ExecuteNonQuery();
"Requested conversion is not supported"

No se que puedo hacer, dado que no se si en una PDA "de verdad" la cultura
estaria en español y por tanto no tendria ese tipo de problemas, ya que solo
he utilizado emulador.
Gracias por la información.
Un saludo.

Preguntas similare

Leer las respuestas

#1 Maxi
28/07/2005 - 14:40 | Informe spam
Hola Javier, te comento, todo los datos numericos para la base de datos
deben ir con ., asegurate que asi le llegue al motor


Salu2
Maxi


"Javier" escribió en el mensaje
news:
Hola:
Estoy trabajando con SQL Server CE y tengo un problema a la hora de
actualizar una fila que es de tipo Float. Creo que el problema esta
relacionada con el hecho de que el emulador de Pocket PC q utilizo con
Visual
Studio se supone que esta en cultura inglesa, y por lo tanto representa
los
valores float con un . mientras que en la española se hace con un ,
Total, que tengo estos 2 fragmentos de codigo, para la insercion y para la
actualizacion y mientras la insercion funciona perfectamente la
actualizacion
no:

SqlCeCommand comandoSQL > new SqlCeCommand("INSERT INTO Articulos (Id_Articulo, Nombre, Stock,
NombreProveedor, PrecioActual) VALUES (?, ?, ?, ?, ?)");

comandoSQL.Parameters.Add(new SqlCeParameter("Id_Articulo",
SqlDbType.Int));
comandoSQL.Parameters.Add(new SqlCeParameter("Nombre", SqlDbType.NVarChar,
100));
comandoSQL.Parameters.Add(new SqlCeParameter("Stock", SqlDbType.Int));
comandoSQL.Parameters.Add(new SqlCeParameter("NombreProveedor",
SqlDbType.NVarChar, 200));
comandoSQL.Parameters.Add(new SqlCeParameter("PrecioActual",
SqlDbType.Float));

comandoSQL.Parameters["Id_Articulo"].Value = id_Articulo;
comandoSQL.Parameters["Nombre"].Value = nombre;
comandoSQL.Parameters["Stock"].Value = stock;
comandoSQL.Parameters["NombreProveedor"].Value = nombreProveedor;
comandoSQL.Parameters["PrecioActual"].Value = precioActual;


Esa es la inserción y la actualización es asi:
SqlCeCommand comandoSQL = new SqlCeCommand("UPDATE Articulos SET Nombre =
?,
Stock = ?, NombreProveedor = ?, PrecioActual = ? WHERE Id_Articulo = ?");
comandoSQL.Parameters.Add(new SqlCeParameter("Id_Articulo",
SqlDbType.Int));
comandoSQL.Parameters.Add(new SqlCeParameter("Nombre", SqlDbType.NVarChar,
100));
comandoSQL.Parameters.Add(new SqlCeParameter("Stock", SqlDbType.Int));
comandoSQL.Parameters.Add(new SqlCeParameter("NombreProveedor",
SqlDbType.NVarChar, 200));
comandoSQL.Parameters.Add(new SqlCeParameter("PrecioActual",
SqlDbType.Float));

comandoSQL.Parameters["Id_Articulo"].Value = id_Articulo;
comandoSQL.Parameters["Nombre"].Value = nombre;
comandoSQL.Parameters["Stock"].Value = stock;
comandoSQL.Parameters["NombreProveedor"].Value = nombreProveedor;
comandoSQL.Parameters["PrecioActual"].Value = precioActual;


Total, que aunque el codigo sea practicamente igual, cuando ejecuto la
inserción todo va perfecto pero con la actualización me salta esta
excepcion
al hacer el tipico ExecuteNonQuery();
"Requested conversion is not supported"

No se que puedo hacer, dado que no se si en una PDA "de verdad" la cultura
estaria en español y por tanto no tendria ese tipo de problemas, ya que
solo
he utilizado emulador.
Gracias por la información.
Un saludo.
Respuesta Responder a este mensaje
#2 Javier
28/07/2005 - 16:28 | Informe spam
Hola:
Ya, eso lo se, que SQL Server CE quiere los valores de float con el punto
decimal, pero la cuestion es que si yo, por estar usando un entorno en
español, tengo una representacion interna del float con una coma decimal, no
puedo hacer nada, o por lo menos no se me ocurre.
Ni siquiera escribiendo la cadena a mano el estilo de
"Update Tabla1 SET AtributoFloat = 3.5 where ID=6"
me lo ejecuta correctamente, siempre me salta la excepcion...

La unica cosa q me ha "funcionado" es pasarse el valor como si fuera un
nvarchar y luego que se encargue el SQL Server CE de hacer el cast
correspondiente, pero entonces pierdo la posicion del punto, es decir, si
tengo 15.65, me guarda 1565.
No se que puedo hacer, por favor una manita que esto me viene "grande" :P
Un saludo.


"Maxi" escribió:

Hola Javier, te comento, todo los datos numericos para la base de datos
deben ir con ., asegurate que asi le llegue al motor


Salu2
Maxi


"Javier" escribió en el mensaje
news:
> Hola:
> Estoy trabajando con SQL Server CE y tengo un problema a la hora de
> actualizar una fila que es de tipo Float. Creo que el problema esta
> relacionada con el hecho de que el emulador de Pocket PC q utilizo con
> Visual
> Studio se supone que esta en cultura inglesa, y por lo tanto representa
> los
> valores float con un . mientras que en la española se hace con un ,
> Total, que tengo estos 2 fragmentos de codigo, para la insercion y para la
> actualizacion y mientras la insercion funciona perfectamente la
> actualizacion
> no:
>
> SqlCeCommand comandoSQL > > new SqlCeCommand("INSERT INTO Articulos (Id_Articulo, Nombre, Stock,
> NombreProveedor, PrecioActual) VALUES (?, ?, ?, ?, ?)");
>
> comandoSQL.Parameters.Add(new SqlCeParameter("Id_Articulo",
> SqlDbType.Int));
> comandoSQL.Parameters.Add(new SqlCeParameter("Nombre", SqlDbType.NVarChar,
> 100));
> comandoSQL.Parameters.Add(new SqlCeParameter("Stock", SqlDbType.Int));
> comandoSQL.Parameters.Add(new SqlCeParameter("NombreProveedor",
> SqlDbType.NVarChar, 200));
> comandoSQL.Parameters.Add(new SqlCeParameter("PrecioActual",
> SqlDbType.Float));
>
> comandoSQL.Parameters["Id_Articulo"].Value = id_Articulo;
> comandoSQL.Parameters["Nombre"].Value = nombre;
> comandoSQL.Parameters["Stock"].Value = stock;
> comandoSQL.Parameters["NombreProveedor"].Value = nombreProveedor;
> comandoSQL.Parameters["PrecioActual"].Value = precioActual;
>
>
> Esa es la inserción y la actualización es asi:
> SqlCeCommand comandoSQL = new SqlCeCommand("UPDATE Articulos SET Nombre =
> ?,
> Stock = ?, NombreProveedor = ?, PrecioActual = ? WHERE Id_Articulo = ?");
> comandoSQL.Parameters.Add(new SqlCeParameter("Id_Articulo",
> SqlDbType.Int));
> comandoSQL.Parameters.Add(new SqlCeParameter("Nombre", SqlDbType.NVarChar,
> 100));
> comandoSQL.Parameters.Add(new SqlCeParameter("Stock", SqlDbType.Int));
> comandoSQL.Parameters.Add(new SqlCeParameter("NombreProveedor",
> SqlDbType.NVarChar, 200));
> comandoSQL.Parameters.Add(new SqlCeParameter("PrecioActual",
> SqlDbType.Float));
>
> comandoSQL.Parameters["Id_Articulo"].Value = id_Articulo;
> comandoSQL.Parameters["Nombre"].Value = nombre;
> comandoSQL.Parameters["Stock"].Value = stock;
> comandoSQL.Parameters["NombreProveedor"].Value = nombreProveedor;
> comandoSQL.Parameters["PrecioActual"].Value = precioActual;
>
>
> Total, que aunque el codigo sea practicamente igual, cuando ejecuto la
> inserción todo va perfecto pero con la actualización me salta esta
> excepcion
> al hacer el tipico ExecuteNonQuery();
> "Requested conversion is not supported"
>
> No se que puedo hacer, dado que no se si en una PDA "de verdad" la cultura
> estaria en español y por tanto no tendria ese tipo de problemas, ya que
> solo
> he utilizado emulador.
> Gracias por la información.
> Un saludo.



Respuesta Responder a este mensaje
#3 Alejandro Mesa
28/07/2005 - 17:07 | Informe spam
Javier,

Me pregunto por que usas FLOAT para almecenar precio o valores unitario,
estas enterado de que que este tipo de data es aproximado?. Te recomiendo que
uses NUMERIC / DECIMAL en vez de FLOAT.

Contestando tu pregunta, pudieras crear una traza para ver la sentencia que
.net envia a sql server?. Quisiera estar seguro que el problema esta en lo
que dices y no otra cosa.


AMB


"Javier" wrote:

Hola:
Ya, eso lo se, que SQL Server CE quiere los valores de float con el punto
decimal, pero la cuestion es que si yo, por estar usando un entorno en
español, tengo una representacion interna del float con una coma decimal, no
puedo hacer nada, o por lo menos no se me ocurre.
Ni siquiera escribiendo la cadena a mano el estilo de
"Update Tabla1 SET AtributoFloat = 3.5 where ID=6"
me lo ejecuta correctamente, siempre me salta la excepcion...

La unica cosa q me ha "funcionado" es pasarse el valor como si fuera un
nvarchar y luego que se encargue el SQL Server CE de hacer el cast
correspondiente, pero entonces pierdo la posicion del punto, es decir, si
tengo 15.65, me guarda 1565.
No se que puedo hacer, por favor una manita que esto me viene "grande" :P
Un saludo.


"Maxi" escribió:

> Hola Javier, te comento, todo los datos numericos para la base de datos
> deben ir con ., asegurate que asi le llegue al motor
>
>
> Salu2
> Maxi
>
>
> "Javier" escribió en el mensaje
> news:
> > Hola:
> > Estoy trabajando con SQL Server CE y tengo un problema a la hora de
> > actualizar una fila que es de tipo Float. Creo que el problema esta
> > relacionada con el hecho de que el emulador de Pocket PC q utilizo con
> > Visual
> > Studio se supone que esta en cultura inglesa, y por lo tanto representa
> > los
> > valores float con un . mientras que en la española se hace con un ,
> > Total, que tengo estos 2 fragmentos de codigo, para la insercion y para la
> > actualizacion y mientras la insercion funciona perfectamente la
> > actualizacion
> > no:
> >
> > SqlCeCommand comandoSQL > > > new SqlCeCommand("INSERT INTO Articulos (Id_Articulo, Nombre, Stock,
> > NombreProveedor, PrecioActual) VALUES (?, ?, ?, ?, ?)");
> >
> > comandoSQL.Parameters.Add(new SqlCeParameter("Id_Articulo",
> > SqlDbType.Int));
> > comandoSQL.Parameters.Add(new SqlCeParameter("Nombre", SqlDbType.NVarChar,
> > 100));
> > comandoSQL.Parameters.Add(new SqlCeParameter("Stock", SqlDbType.Int));
> > comandoSQL.Parameters.Add(new SqlCeParameter("NombreProveedor",
> > SqlDbType.NVarChar, 200));
> > comandoSQL.Parameters.Add(new SqlCeParameter("PrecioActual",
> > SqlDbType.Float));
> >
> > comandoSQL.Parameters["Id_Articulo"].Value = id_Articulo;
> > comandoSQL.Parameters["Nombre"].Value = nombre;
> > comandoSQL.Parameters["Stock"].Value = stock;
> > comandoSQL.Parameters["NombreProveedor"].Value = nombreProveedor;
> > comandoSQL.Parameters["PrecioActual"].Value = precioActual;
> >
> >
> > Esa es la inserción y la actualización es asi:
> > SqlCeCommand comandoSQL = new SqlCeCommand("UPDATE Articulos SET Nombre =
> > ?,
> > Stock = ?, NombreProveedor = ?, PrecioActual = ? WHERE Id_Articulo = ?");
> > comandoSQL.Parameters.Add(new SqlCeParameter("Id_Articulo",
> > SqlDbType.Int));
> > comandoSQL.Parameters.Add(new SqlCeParameter("Nombre", SqlDbType.NVarChar,
> > 100));
> > comandoSQL.Parameters.Add(new SqlCeParameter("Stock", SqlDbType.Int));
> > comandoSQL.Parameters.Add(new SqlCeParameter("NombreProveedor",
> > SqlDbType.NVarChar, 200));
> > comandoSQL.Parameters.Add(new SqlCeParameter("PrecioActual",
> > SqlDbType.Float));
> >
> > comandoSQL.Parameters["Id_Articulo"].Value = id_Articulo;
> > comandoSQL.Parameters["Nombre"].Value = nombre;
> > comandoSQL.Parameters["Stock"].Value = stock;
> > comandoSQL.Parameters["NombreProveedor"].Value = nombreProveedor;
> > comandoSQL.Parameters["PrecioActual"].Value = precioActual;
> >
> >
> > Total, que aunque el codigo sea practicamente igual, cuando ejecuto la
> > inserción todo va perfecto pero con la actualización me salta esta
> > excepcion
> > al hacer el tipico ExecuteNonQuery();
> > "Requested conversion is not supported"
> >
> > No se que puedo hacer, dado que no se si en una PDA "de verdad" la cultura
> > estaria en español y por tanto no tendria ese tipo de problemas, ya que
> > solo
> > he utilizado emulador.
> > Gracias por la información.
> > Un saludo.
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida