【问题标题】:How to pass a String with the character "@" as part of the string?如何将带有字符“@”的字符串作为字符串的一部分传递?
【发布时间】: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


【解决方案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

【讨论】:

  • 是的,这是一个愚蠢的错误......这是因为我在不同的项目中多次复制代码,在某些情况下我没有正确纠正我。谢谢...关于 de Null 值,我没有意识到默认情况下为 null...我正在为大学考试完成这个,而且自从我编写这段代码的第一部分以来已经有很长时间了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2021-09-25
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多