Principiante aquí:¿Qué está pasando los parámetros a SQL y por qué lo necesito?
En este answer a mi pregunta de cómo insertar datos en SQL Server, mencionó pasar parámetros en lugar de concatenación de cadenas como la que tengo actualmente.
¿Es esto realmente necesario para la seguridad? Si es así, ¿qué es exactamente pasar los parámetros? Cuando lo busco en google obtengo mucho acerca de los procedimientos almacenados. Es eso lo que quiero, no sé sobre procedimientos almacenados ... todavía.
Si puede orientarme en la dirección correcta, lo agradecería.
Gracias.
EDIT:
autorización, aquí es lo que tengo. Parece actualizar la base de datos correctamente y eventualmente cambiaré las entradas codificadas a las entradas de una etiqueta. Por favor, confirme si la forma en que lo hice no es vulnerable a ninguna inyección sql o pirateo.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
public partial class Stats : System.Web.UI.Page
{
public SqlDataReader DataReader;
public SqlCommand Command;
string queryString = ("INSERT INTO UserData (UserProfileID, ConfidenceLevel, LoveLevel, HappinessLevel) VALUES (@UID, @CL, @LL, @HL);");
//string queryString = ("INSERT INTO UserData (UserProfileID, ConfidenceLevel, LoveLevel, HappinessLevel) VALUES ('a051fc1b-4f51-485b-a07d-0f378528974e', 2, 2, 2);");
protected void Page_Load(object sender, EventArgs e)
{
LabelUserID.Text = Membership.GetUser().ProviderUserKey.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
//connect to database
MySqlConnection database = new MySqlConnection();
database.CreateConn();
//create command object
Command = new SqlCommand(queryString, database.Connection);
//add parameters. used to prevent sql injection
Command.Parameters.Add("@UID", SqlDbType.UniqueIdentifier);
Command.Parameters["@UID"].Value = Membership.GetUser().ProviderUserKey;
Command.Parameters.Add("@CL", SqlDbType.Int);
Command.Parameters["@CL"].Value = 9;
Command.Parameters.Add("@LL", SqlDbType.Int);
Command.Parameters["@LL"].Value = 9;
Command.Parameters.Add("@HL", SqlDbType.Int);
Command.Parameters["@HL"].Value = 9;
Command.ExecuteNonQuery();
}
}
Mi momento de mayor orgullo: http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain/332367 – Will
@Will - Me encantan las pequeñas Bobby Tables. Ranks justo allí con su tira sobre Gotos. –
@Will: Nice .... –