必须声明标量变量“@vigencia_desde”

本文关键字:@vigencia desde 变量 声明 标量 | 更新日期: 2023-09-27 18:34:44

我在SQL服务器中插入时遇到异常问题。错误是:

必须声明标量变量"@vigencia_desde"。有时会出现另一个变量:必须声明标量变量"@fecha_nac"。

SQL 服务器表中的这些列是 DATE

我告诉你我是怎么做到的。

      if (Conexion() != null) {
           Response.Write("Conectado");
           SqlConnection conexion = new SqlConnection();
           using (SqlCommand command = new SqlCommand())
           {  
               conexion = Conexion();
               command.Parameters.Clear();

               command.CommandText = "INSERT INTO IngT_Persona (Nombre, Rut, Fecha_nac, Estudios, Gerencia, Cargo, Jefe, Vigencia_desde,Vigencia_hasta, Correo, Lista_distribucion, tipo_tarjeta, Tajeta_casino, Tarjeta_fotocopia, caso_casino, caso_imp_fotoc, req_equipo, Caso_equipo, Apli_crm, Apli_QV, Apli_fin700, Apli_SAP, equipo_tel, salida_cel, larga_dist_n, larga_dist_int, no, Anexo, Caso_tel, Obs, Fecha_creacion, usuario) VALUES (@nombre, @rut, @fecha_nac, @estudios, @gerencia, @cargo, @jefe, @vigencia_desde, @vigencia_hasta, @correo, @lista_distribucion, @tipo_tarjeta, @tarjeta_casino, @tarjeta_fotocopia, @caso_casino, @caso_imp_fotoc, @req_equipo, @caso_equipo, @apli_crm, @apli_qv, @apli_fin700, @apli_sap, @equipo_tel, @salida_cel, @larga_dist_n, @larga_dist_int, @no, @anexo, @caso_tel, @obs, @fecha_creacion, @usuario)";
               command.Parameters.AddWithValue("@nombre", nombre);
               command.Parameters.AddWithValue("@rut", rut);
              // DateTime date_fecha_nac = DateTime.ParseExact(fecha_nac, "dd/MM/yyyy", null);
               DateTime date_fecha_nac;
               if (DateTime.TryParse(fecha_nac, out date_fecha_nac))
               {
                   command.Parameters.AddWithValue("@fecha_nac", DateTime.Today);
               }
               command.Parameters.AddWithValue("@estudios", estudios);
               command.Parameters.AddWithValue("@gerencia", gerencia );
               command.Parameters.AddWithValue("@cargo", cargo );
               command.Parameters.AddWithValue("@jefe", jefe_directo);
               DateTime date_vigencia_desde;
               if (DateTime.TryParse(vigencia_desde, out date_vigencia_desde))
               {
                   command.Parameters.AddWithValue("@vigencia_desde", DateTime.Today);
               }
               DateTime date_vigencia_hasta;
               if (DateTime.TryParse(vigencia_hasta, out date_vigencia_hasta))
               {
                   command.Parameters.AddWithValue("@vigencia_hasta", DateTime.Today);
               }
               command.Parameters.AddWithValue("@correo", correo);
               command.Parameters.AddWithValue("@lista_distribucion", lista_dib);
               command.Parameters.AddWithValue("@tipo_tarjeta", tarjeta);
               command.Parameters.AddWithValue("@tarjeta_casino", casino);
               command.Parameters.AddWithValue("@tarjeta_fotocopia",impres_fotoc);
               command.Parameters.AddWithValue("@caso_casino", caso_casino);
               command.Parameters.AddWithValue("@caso_imp_fotoc", caso_imprec_fotoc);
               command.Parameters.AddWithValue("@req_equipo", req_equip);
               command.Parameters.AddWithValue("@caso_equipo", caso_equip);
               command.Parameters.AddWithValue("@apli_crm", crm);
               command.Parameters.AddWithValue("@apli_qv", qlikview);
               command.Parameters.AddWithValue("@apli_fin700", fin700);
               command.Parameters.AddWithValue("apli_sap", sap);
               command.Parameters.AddWithValue("@equipo_tel", equip_tele);
               command.Parameters.AddWithValue("@salida_cel", salida_cell);
               command.Parameters.AddWithValue("@larga_dist_n", larga_dist_nac);
               command.Parameters.AddWithValue("@larga_dist_int", larga_dist_int);
               command.Parameters.AddWithValue("@no", chk_no);
               command.Parameters.AddWithValue("@anexo", anexo );
               command.Parameters.AddWithValue("@caso_tel", caso_fono);
               command.Parameters.AddWithValue("@obs", observ);
               //command.Parameters.AddWithValue("@fecha_creacion", DateTime.Today.ToString("dd-MM-yyyy")); 
               command.Parameters.AddWithValue("@fecha_creacion", DateTime.Today);
               command.Parameters.AddWithValue("@usuario", Session["logon"] );

               try
               {
                  // connection.Open();
                   command.Connection = conexion;
                   int recordsAffected = command.ExecuteNonQuery();
                   Response.Write("ingresado a la tabla"); 
               }
               catch (SqlException ex)
               {
                   except = ex.Message;
                   Response.Write(except); 
               }
               finally
               {
                   conexion.Close();
                   Response.Redirect("INGRESO.aspx");
               }
           }
       }
       else
       {
           Response.Write("nO HUBO CONEXION"); 
       }

希望您的帮助问候

必须声明标量变量“@vigencia_desde”

如果您注意到,导致此问题的所有参数都有一些共同点:它们都包含在 if 语句中:

DateTime date_fecha_nac;
if (DateTime.TryParse(fecha_nac, out date_fecha_nac))
{
    command.Parameters.AddWithValue("@fecha_nac", DateTime.
}

如果TryParse失败,您将永远不会定义该参数,但仍会尝试在 INSERT 语句中使用它。这会导致 SQL 失败,因为当您告诉它插入@fecha_nac但不定义参数时,它不知道你在说什么。

如果要在查询中使用参数,则始终必须将其添加到command.Parameters集合中。您可以选择要在TryParse失败时使用的默认值:

DateTime date_fecha_nac;
if (DateTime.TryParse(fecha_nac, out date_fecha_nac))
{
    command.Parameters.AddWithValue("@fecha_nac", fecha_nac);
}
else
{
    command.Parameters.AddWithValue("@fecha_nac", DateTime.Today);
}

或者,如果这些字段在 SQL 中可为 NULL,则可以不为不需要的参数设置值:

command.Parameters.Add("@fecha_nac", SqlDbType.DateTime);
DateTime date_fecha_nac;
if (DateTime.TryParse(fecha_nac, out date_fecha_nac))
{
    command.Parameters["@fecha_nac"] = date_fecha_nac;
}

您只是有时在命令中包含这些参数,但它们是插入所必需的。 您需要弄清楚如果您的尝试解析失败该怎么办,也许这些应该是空的?

例如

DateTime date_vigencia_desde;
if (DateTime.TryParse(vigencia_desde, out date_vigencia_desde))
{
   command.Parameters.AddWithValue("@vigencia_desde", DateTime.Today);
} else 
{
   command.Parameters.AddWithValue("@vigencia_desde", System.DbNull.Value);
}

还要注意的是,您的逻辑看起来不对劲 - 如果您正确解析日期,请将此参数设置为今天 - 这就是您要做的吗?

您有条件地添加参数,但查询需要这些参数。请改为执行以下操作:

DateTime date_vigencia_desde;
if (DateTime.TryParse(vigencia_desde, out date_vigencia_desde))
    command.Parameters.AddWithValue("@vigencia_desde", DateTime.Today);
else
    command.Parameters.AddWithValue("@vigencia_desde", DBNull.Value);

以此类推,用于其他有条件添加的参数。

在这些行中,如果条件失败,则不要将参数添加到集合中,从而导致错误消息

DateTime date_fecha_nac;
if (DateTime.TryParse(fecha_nac, out date_fecha_nac))
{
   command.Parameters.AddWithValue("@fecha_nac", DateTime.Today);
}

所以你需要一个 else 条件来添加一个默认值

else
{
    command.Parameters.AddWithValue("@fecha_nac", ????);
}

但是,您似乎以相反的方式编写了它。如果 TryParse 返回 true,则转换已成功,您可能希望将参数的值设置为转换后的日期时间

DateTime date_fecha_nac;
if (DateTime.TryParse(fecha_nac, out date_fecha_nac))
{
   command.Parameters.AddWithValue("@fecha_nac", date_fecha_nac);
}
else
{
   command.Parameters.AddWithValue("@fecha_nac", DateTime.Today);
}
对于因

转换而添加的其他参数(@vigencia_hasta@vigencia_desde (,也会发生同样的情况

相关文章:
  • 没有找到相关文章