2011-05-02 20 views
5

No puedo insertar valores decimales en la tabla del servidor Sql.No se puede insertar la tabla del servidor decimal a sql a través del código C#

Lo que estoy tratando de hacer es auto explicativo a través de estas líneas de código:

long fileSizeInBytes = ComponentUploadControl.FileContent.Length; 
Decimal fileSizeInMB = Convert.ToDecimal(fileSizeInBytes)/(1024.0m * 1024.0m); 
Decimal fileSizeInMBRounded = Math.Round(fileSizeInMB, 2); 
cmd.Parameters.Add("@fileSize", SqlDbType.Decimal).Value = fileSizeInMBRounded; 

El valor que se está insertado en la base de datos es despojado de las cifras decimales. Para ser más específico si el fileSizeInMBRounded es 11.73, el valor que se está insertado en la base de datos es 11,00

Por favor, ayúdame

Gracias a la espera

+0

¿Por qué no almacenar simplemente fileSizeInBytes fuera de interés? –

+0

El error está en el procedimiento almacenado. Estaba especificando el tipo de parámetro como simplemente decimal, en cambio debería ser decimal (18,2). De todas formas, ahora funciona como un amuleto después de corregir el error –

Respuesta

8

Mi sospecha es que su campo decimal está configurado incorrectamente en SQL. Lo que quiere es un campo decimal(18,2) que permite dos decimales. Mi sospecha es que declaró el campo como decimal(18,0) (el valor predeterminado), que no permite ningún lugar decimal.

Si puede usar SQL Server Profiler para verificar que el contenido de INSERT vaya a su base de datos, le será más fácil determinar si un problema como este se debe a su código o algo en el servidor SQL.

+0

Aquí está el error cuando estaba insertando los datos usando el procedimiento almacenado, Crear procedimiento [dbo]. [NewComponentInsertion] (@componentName varchar (max), @fileSize decimal, @filePath varchar (max), @price decimal, @description varchar (max), @totalDownloads int, @disableFlag int) como insertar en [dbo]. [Componentes] ([Component Name], [Size (en MB)], [Total Downloads], [FilePath], [Price (en SEK)], Description, DisableFlag) values ​​(@componentName, @fileSize, @totalDownloads, @filePath, @price, @description, @disableFlag) Estaba insertando el decimal claramente sin la especificación –

+0

debería ser en cambio decimal (18,2) , por lo que el procedimiento almacenado alterado es, Crear procedimiento [dbo]. [NewComponentInsertion] (@componentName varchar (max), @fileSize decimal (18,2), @filePath varchar (max), @price decimal (18,2), @description varchar (max), @totalDownloads int, @disableFlag int) como insertar en [dbo]. [Componentes] ([Component Name], [Size (en MB)], [Total Descargas], [FilePath], [Precio (en SEK)], Descripción, DisableFlag) valores (@componentName, @fileSize, @totalDownloads, @filePath, @price, @description, @disableFlag) –

+0

después de corregir el error que funciona como un encanto. –

3

intenta establecer el SqlParameter.Scale a 2.

SqlParameter parameter = new SqlParameter("@fileSize", SqlDbType.Decimal); 
parameter.Scale = 2; 
parameter.Value = fileSizeInMBRounded; 
cmd.Parameters.Add(parameter); 

Consulte también la propiedad Precision según lo sugerido por Bruno (el valor predeterminado es 0).

+0

como se señaló que fue el error. Gracias por el consejo sin embargo. –

1

Debe establecer Escala y precisión.

Creo que ese es el problema.

1

Su parámetro se ve bien. Verificaría el tipo de datos de la columna de la base de datos

+0

Tienes razón. Aquí está el error cuando estaba insertando los datos usando el procedimiento almacenado, Crear procedimiento [dbo].[NewComponentInsertion] (@componentName varchar (max), @fileSize decimal, @filePath varchar (max), @price decimal, @description varchar (max), @totalDownloads int, @disableFlag int) como insertar en [dbo]. [ Componentes] ([Nombre del componente], [Tamaño (en MB)], [Descargas totales], [FilePath], [Precio (en SEK)], Descripción, DisableFlag) valores (@componentName, @fileSize, @totalDownloads, @filePath , @price, @description, @disableFlag) Estaba insertando el decimal claramente sin especificación –

Cuestiones relacionadas