c# - 从数值数据类型转换为十进制时出错

标签 c# sql sql-server

这是我的问题,我有一个包含以下列的表:

asis_doc_minutos decimal(4,1)

如果我使用简单的插入查询插入以下数字(1.5),它就会插入它!但 我的 SProcedure 不插入数据。这是我的 Sp:

 ALTER procedure [dbo].[insertar_pla_asis_doc]
  @fecha datetime,
  @tema varchar(500),
  @minutos decimal(2,2),
  @cod_docente int,
  @cod_materia varchar(25),
  @cod_seccion int,
  @cod_ciclo int,
  @cod_escuela int
  as
  begin
 insert into pla_asis_doc(asis_doc_fecha, asis_doc_tema,
 asis_doc_fecha_realizo, asis_doc_cod_docente, asis_doc_cod_mat, asis_doc_seccion,
     asis_doc_cod_ciclo, 
 asis_doc_cod_escuela, asis_doc_minutos)
 values (@fecha, @tema, getdate(), @cod_docente, @cod_materia, @cod_seccion,
 @cod_ciclo, @cod_escuela, @minutos);
   end

我从 C# 调用这个 Sp,这就是我这样做的方式:

 int valor_devuelto = puente.insertar(fecha, txtTema.Text,
 Convert.ToDecimal(lblHoras.Text), cod_emp, cod_materia, seccion,
 Convert.ToInt32(ciclo.Text), cod_esc);

请注意,(lblHoras.Text) 是从文本框调用的,因此我将其转换为十进制,因为这是我的专栏所期望的。该行调用另一个类中的方法,该方法在我的数据库中调用我的 Sp,并且我在哪里收到错误,这是该代码:

public int insertar(DateTime fecha, string tema, decimal minutos, int docente, string materia_codigo, int seccion, int ciclo, int escuela_cod)
{
    int valor = 0;
    try
    {
        cn.Open();
        cmd.Connection = cn;                
        cmd.CommandText = "insertar_pla_asis_doc";
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.Parameters.Add("@fecha", System.Data.SqlDbType.DateTime).Value = fecha;
        cmd.Parameters.Add("@tema", System.Data.SqlDbType.VarChar).Value = tema;
        cmd.Parameters.Add("@minutos", System.Data.SqlDbType.Decimal).Value = minutos;
        cmd.Parameters.Add("@cod_docente", System.Data.SqlDbType.Int).Value = docente;
        cmd.Parameters.Add("@cod_materia", System.Data.SqlDbType.VarChar).Value = 
        materia_codigo;
        cmd.Parameters.Add("@cod_seccion", System.Data.SqlDbType.Int).Value = seccion;
        cmd.Parameters.Add("@cod_ciclo", System.Data.SqlDbType.Int).Value = ciclo;
        cmd.Parameters.Add("@cod_escuela", System.Data.SqlDbType.Int).Value = 
        escuela_cod;
        valor = cmd.ExecuteNonQuery();
        cn.Close();
    }
    catch (Exception ex)
    {
    }
    return valor;
}

每次我运行此代码时都会出现错误: 将数字数据转换为小数时出错。 (转换错误)我该如何解决这个问题?

最佳答案

您在过程中的参数声明为

@minutos decimal(2,2)

表示两个数字,都是小数点右边。

检查此示例:

create table #t (d decimal(2,2))
insert #t values (1.5)

增加参数的大小。

关于c# - 从数值数据类型转换为十进制时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23348379/

相关文章:

c# - 如何强制按钮看起来像按下/悬停?

c# - LinqToSql 引用的实体将抛出 NullReferenceException

SQL 2005 sp_GetAppLock --- 何时调用 sp_ReleaseAppLock?

c# - 使ModelState持久,但不能太持久

c# - 连接 2 个变量的 Getter Only 属性上的 DataBinding

sql - 如何将 Try/Catch 添加到 SQL 存储过程

c# - 在 ASP.NET 中从 SQL 数据库输出一条记录的一个字段

sql - 修改数据库时的特殊情况

sql-server - 从 SQL Server 2008 R2 Express 升级到 SQL Server 2008 R2 Enterprise

sql - SQL Server Money 数据类型需要更高的精度