none
SQL Server Error con comillas simples RRS feed

  • Pregunta

  • Tengo el siguiente codigo en C# para ejecutar un store procedure en una base de datos SQL

     try
            {
                
    
                using (SqlConnection conn = new SqlConnection(GetConnectionString(labId)))
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText ="Usuarios_ValidarUsuario";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("Usuario", userLogin);
                    cmd.Parameters.Add("@Password", SqlDbType.Char).Value = "?????''?W??9Fj?b";
                   // cmd.Parameters.AddWithValue("Password", userPassword);
    
                    var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
                    returnParameter.Direction = ParameterDirection.ReturnValue;
    
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    var result = returnParameter.Value;
                    conn.Close();
                    return (int)result;
                }
            }
    Pero al momento de ejecutar el store lo hace de la siguiente manera:
    exec sigma_user.Usuarios_ValidarUsuario @Usuario=N'mamigo',@Password=N'?????''''?W??9Fj?b'

    Como veran agrega 2 comillas simples.

    miércoles, 23 de septiembre de 2020 13:33

Respuestas

  • Como veran agrega 2 comillas simples.

    Sí, es lo correcto. La forma de pasarle al servidor unas comillas simples dentro de una cadena que a su vez está delimitada por comillas simples consiste en duplicar cada una de las comilla simples que están dentro de la cadena delimitada. Si tuvieras que escribir a mano la sentencia SQL para llamar al servidor, tendrías que duplicar tú manualmente las comillas. Si usas parámetros como lo estás haciendo, el sistema de parametrización ya "sabe" que tiene que hacer dicha duplicación. Al ejecutar el SP, el servidor sabe que tiene que hacer la operación al contrario, y "des-duplica" las comillas antes de que el procedimiento procese el parámetro, con lo que finalmente dentro del procedimiento se reciben las comillas correctas que realmente querías pasarle.
    • Marcado como respuesta Enzzzz miércoles, 23 de septiembre de 2020 18:00
    miércoles, 23 de septiembre de 2020 17:41

Todas las respuestas

  • Hola

    Por cada comita simple, debes agregar una mas


    IIslas Master Consultant SQL Server

    miércoles, 23 de septiembre de 2020 16:49
  • Como veran agrega 2 comillas simples.

    Sí, es lo correcto. La forma de pasarle al servidor unas comillas simples dentro de una cadena que a su vez está delimitada por comillas simples consiste en duplicar cada una de las comilla simples que están dentro de la cadena delimitada. Si tuvieras que escribir a mano la sentencia SQL para llamar al servidor, tendrías que duplicar tú manualmente las comillas. Si usas parámetros como lo estás haciendo, el sistema de parametrización ya "sabe" que tiene que hacer dicha duplicación. Al ejecutar el SP, el servidor sabe que tiene que hacer la operación al contrario, y "des-duplica" las comillas antes de que el procedimiento procese el parámetro, con lo que finalmente dentro del procedimiento se reciben las comillas correctas que realmente querías pasarle.
    • Marcado como respuesta Enzzzz miércoles, 23 de septiembre de 2020 18:00
    miércoles, 23 de septiembre de 2020 17:41