这是我简单的存储过程
ALTER procedure [dbo].[insertar_Empleado]
@nombre varchar(40),
@apellido varchar (40),
@dni varchar(7),
@direccion int,
@usuario varchar (50),
@contraseña varchar(20),
@mail varchar(50),
@tel varchar(20),
@tipo int
as
insert into Empleados(nombre, apellido, dni, id_direccion ,id_tipoEmpleado, mail,
telefono, usuario, pass)
values(@nombre, @apellido, @dni, @direccion, @tipo, @mail, @tel, @usuario,
@contraseña)
问题是参数@usuario总是包含一个像“@Peter”或“@George”这样的字符串,所以当我插入一些行时,字段“usuario”有一个像“Peter”或“George”这样的值忽略人物。我需要这个原因,这是一种识别该用户是特殊类型用户的方法。有什么想法吗?
** RS:
这是第一部分:**
public void InsertarCliente(Cliente nCliente, SqlConnection conec, SqlTransaction transac)
{
Datos objDatos = new Datos();
SqlParameter[] objParametros = new SqlParameter[9];
objParametros[0] = new SqlParameter("@nombre", SqlDbType.VarChar, 40);
objParametros[0].Value = nCliente.Nombre;
objParametros[1] = new SqlParameter("@apellido", SqlDbType.VarChar, 40);
objParametros[1].Value = nCliente.Apellido;
objParametros[2] = new SqlParameter("@dni", SqlDbType.VarChar, 9);
objParametros[2].Value = nCliente.Dni;
objParametros[3] = new SqlParameter("@direccion", SqlDbType.Int, 6);
objParametros[3].Value = nCliente.Direccion;
objParametros[4] = new SqlParameter("@tipo", SqlDbType.Int, 3);
objParametros[4].Value = null;
objParametros[5] = new SqlParameter("@mail", SqlDbType.VarChar, 50);
objParametros[5].Value = nCliente.Mail;
objParametros[6] = new SqlParameter("@tel", SqlDbType.VarChar, 20);
objParametros[6].Value = nCliente.Telefono;
objParametros[7] = new SqlParameter("@usuario", SqlDbType.VarChar, 50);
objParametros[7].Value = nCliente.Nombre;
objParametros[8] = new SqlParameter("@contraseña", SqlDbType.VarChar, 20);
objParametros[8].Value = nCliente.Nombre;
try
{
if (nCliente.Usuario.StartsWith("@"))
{
objParametros[4].Value = 1;
objDatos.ExecuteNonQuery("insertar_Empleado", ref objParametros, ref conec, ref transac);
}
else
{
objParametros[4].Value = 3;
objDatos.ExecuteNonQuery("insertar_Cliente", ref objParametros, ref conec, ref transac);
}
}
catch (Exception ex)
{
throw new Exception("Error al insertar el Cliente", ex);
}
}
第二部分是使用我使用的存储过程的通用方法:
public void ExecuteNonQuery(string nombreSP , ref SqlParameter[] param, ref SqlConnection objConn, ref SqlTransaction objTran)
{
//Hago que el try encierre todo el bloque del procedimiento, sino me puede quedar la transacción colgada
try
{
SqlCommand objCommand = new SqlCommand();
objCommand.CommandType = System.Data.CommandType.StoredProcedure;
objCommand.CommandText = nombreSP;
//La conexión que pasé como parámetro
objCommand.Connection = objConn;
//la transacción que pasé como parámetro
objCommand.Transaction = objTran;
foreach (SqlParameter parametro in param)
{
objCommand.Parameters.Add(parametro);
}
objCommand.Connection = objConn;
objCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
throw;
}
}
答案 0 :(得分:1)
我认为您在@
字段中没有看到usario
任何值的原因是您在此处将名称添加到此参数:
objParametros[7] = new SqlParameter("@usuario", SqlDbType.VarChar, 50);
objParametros[7].Value = nCliente.Nombre;
我认为应该是
objParametros[7] = new SqlParameter("@usuario", SqlDbType.VarChar, 50);
objParametros[7].Value = nCliente.Usuario;
作为一个非相关点,这一行是多余的:
objParametros[4].Value = null;
默认情况下,该值为null
,这不等同于数据库中的NULL
。等价物是DbNull.Value
。