【发布时间】:2013-12-13 10:56:42
【问题描述】:
这是我的简单存储过程
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;
}
}
【问题讨论】:
-
如何将值传递给存储过程?你能发布你的那部分代码吗?
-
如前所述,我怀疑您添加的参数不正确。 This simplified example 工作正常。
-
OMG 再次出现这个愚蠢的错误...... jajja.. 我会更正这个,我会尝试再次插入!谢谢!
标签: sql stored-procedures char parameter-passing procedure