none
Sobrecarga de metodos RRS feed

  • Pregunta

  • Buen día

    Una consulta

    Si en una aplicación por ejemplo quiero ingresar nombre, apellido y email de una persona y guardarlo en una base de datos, pero que el mail sea opcional, cual seria la forma correcta de hacerlo?

    Puedo crear dos metodos con el mismo nombre, uno que reciba nombre, apellido y email, y otro solo nombre y apellido, pero debo si o si crear dos procedimientos almacenados en SQL o hay alguna otra forma de solucionarlo?

    Saludos

    Gracias

    sábado, 31 de marzo de 2018 8:36

Respuestas

  • Puedes crear en la base de datos el campo con la coletilla "NULL" para indicarle que acepte valores nulos.

    Basta con un único procedimiento almacenado que acepte el parámetro eMail y grabe siempre el parámetro eMail. Cuando lo quieras omitir, basta con que desde el código cliente le pases el valor NULL en ese parámetro (que desde el código cliente se expresa como DBNull.Value). Cuando la sentencia de grabación tome ese NULL y lo grabe, quedará NULL en la tabla, que significa que se ha omitido el email.

    En el código cliente puedes crear dos métodos si quieres. Pero también puedes poner un único método en el que el email sea un parámetro opcional:

    public void Grabar(string nombre, string apellido, string eMail=null) {...}

    Si al llamarlo se omite el eMail, entonces toma el valor predeterminado (que en el ejemplo anterior es =null). Dentro del procedimiento metes un "if" de forma que si es null grabas DBNull.Value, y de lo contrario grabas el valor que te hayan pasado.


    sábado, 31 de marzo de 2018 10:51
  • No.  La base de datos tendría el campo de email como opcional (o sea, que admite nulos).

    Del lado de .net, lo que uno hace es simplemente convertir valores nulos a DbNull.Value (el valor especial que significa nulo) y listo.

    Create Table dbo.tblUsuarios
    (
        ID bigint Not Null Identity(1, 1) Primary Key Clustered
        , Nombre nvarchar(100) Not Null
        , Email nvarchar(100) Null
    );

    Del lado de .net:

    public void GuardarUsuario(string nombre, string email)
    {
        using (SqlConnection conn = new SqlConnection("<cadena>"))
        {
            conn.Open();
            string cmdText = "Insert Into dbo.tblUsuarios Values (@nombre, @email);";
            using (SqlCommand cmd = new SqlCommand(cmdText, conn))
            {
                cmd.Parameters.Add("nombre", SqlDbType.NVarChar).Value = nombre ?? DbNull.Value;
                cmd.Parameters.Add("email", SqlDbType.NVarChar).Value = email ?? DbNull.Value;
                cmd.ExecuteNonQuery();
            }
        }
    }


    Jose R. MCP
    Code Samples

    sábado, 31 de marzo de 2018 10:51
    Moderador

Todas las respuestas

  • Puedes crear en la base de datos el campo con la coletilla "NULL" para indicarle que acepte valores nulos.

    Basta con un único procedimiento almacenado que acepte el parámetro eMail y grabe siempre el parámetro eMail. Cuando lo quieras omitir, basta con que desde el código cliente le pases el valor NULL en ese parámetro (que desde el código cliente se expresa como DBNull.Value). Cuando la sentencia de grabación tome ese NULL y lo grabe, quedará NULL en la tabla, que significa que se ha omitido el email.

    En el código cliente puedes crear dos métodos si quieres. Pero también puedes poner un único método en el que el email sea un parámetro opcional:

    public void Grabar(string nombre, string apellido, string eMail=null) {...}

    Si al llamarlo se omite el eMail, entonces toma el valor predeterminado (que en el ejemplo anterior es =null). Dentro del procedimiento metes un "if" de forma que si es null grabas DBNull.Value, y de lo contrario grabas el valor que te hayan pasado.


    sábado, 31 de marzo de 2018 10:51
  • No.  La base de datos tendría el campo de email como opcional (o sea, que admite nulos).

    Del lado de .net, lo que uno hace es simplemente convertir valores nulos a DbNull.Value (el valor especial que significa nulo) y listo.

    Create Table dbo.tblUsuarios
    (
        ID bigint Not Null Identity(1, 1) Primary Key Clustered
        , Nombre nvarchar(100) Not Null
        , Email nvarchar(100) Null
    );

    Del lado de .net:

    public void GuardarUsuario(string nombre, string email)
    {
        using (SqlConnection conn = new SqlConnection("<cadena>"))
        {
            conn.Open();
            string cmdText = "Insert Into dbo.tblUsuarios Values (@nombre, @email);";
            using (SqlCommand cmd = new SqlCommand(cmdText, conn))
            {
                cmd.Parameters.Add("nombre", SqlDbType.NVarChar).Value = nombre ?? DbNull.Value;
                cmd.Parameters.Add("email", SqlDbType.NVarChar).Value = email ?? DbNull.Value;
                cmd.ExecuteNonQuery();
            }
        }
    }


    Jose R. MCP
    Code Samples

    sábado, 31 de marzo de 2018 10:51
    Moderador