¿Deberia declarar variable escalar?

Tengo un método creado en un mapper que uso para verificar el nombre de usuario y el password para un login, el código es el siguiente:

    public Usuario buscarUsuarioPorNombreYContrasenia(string xNombre, string xPass)
        {
            var param = new List<SqlParameter>();
            var nombre = new SqlParameter();
            var pass = new SqlParameter();
            nombre.ParameterName = "@nombreUsuario";
            nombre.Value = xNombre;
            param.Add(nombre);
            pass.ParameterName = "@pass";
            pass.Value = xPass;            
            param.Add(pass);
            var con = abrirConexion();
            var reader = select("SELECT * FROM usuario WHERE nombreUsuario = @nombreUsuario AND pass = @pass",CommandType.Text,param,con,null);
 // Se cae pasando esta línea.
            Usuario u = null;
            {
                if (reader.Read())
                {
                    u = cargarUsuario(reader);

                }
                cerrarConexion(con);
                return u;     
            }
        }

En cuanto a la base de datos tengo lo siguiente, si hago la consulta en SQL Server entonces funciona y devuelve lo esperado pero en cambio en Visual me da ese error y lo raro es que ya he hecho esas consultas anteriormente y han funcionado, tal vez me estoy pasando algo por alto esta vez.

CREATE TABLE usuario(
idUsuario INTEGER PRIMARY KEY IDENTITY (1,1),
nombreUsuario VARCHAR (50) UNIQUE NOT NULL,
tipoUsuario BIT NOT NULL,
pass VARCHAR (50) NOT NULL,
) 

Acá está lo que hace el método Select:

public static SqlDataReader select(string sentencia, CommandType tipoComando, List<SqlParameter> parametros, SqlConnection conn, SqlTransaction trns)
{
    if(conn == null)
    {
        abrirConexion();
    }

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = sentencia;
    cmd.CommandType = tipoComando;
    if(parametros == null)
    {
        cmd.Parameters.AddRange(parametros.ToArray());
    }
    if(conn.State == ConnectionState.Closed)
    {
        conn.Open();
    }
    if(trns != null)
    {
        cmd.Transaction = trns;
    }
    SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    return dr;            
}

Gracias de antemano.

0
задан 28.12.2016, 18:19
0 ответов

Условие, которое он определяет, когда добавлять параметры не правильно:

if(parametros == null) // incorrecto
{
    cmd.Parameters.AddRange(parametros.ToArray());
}

Очевидно, quisistes говорить:

if(parametros != null)
{
    cmd.Parameters.AddRange(parametros.ToArray());
}

Он имеет смысл, что, если никогда ты не добавляешь параметры к объекту cmd, что дал бы тебе ошибку:

Must заявил the scalar

1
ответ дан 03.12.2019, 17:57
  • 1
    Привет, sí это было этим самим, редкое - что usé тот же select, чтобы получать все пользователи и sí я funcionó сейчас solucioné правда в том, что была достаточно ошибки индюком, но, что я не собирался замечать, спасибо за комментирование всем тем, кто это сделали. –  28.12.2016, 20:28