必须声明标量变量“@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");
}
希望您的帮助问候
如果您注意到,导致此问题的所有参数都有一些共同点:它们都包含在 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
(,也会发生同样的情况