Uso de parámetros para insertar datos en la base de datos de acceso.
Tengo el siguiente método para insertar datos en una base de datos de acceso, que funciona bien, pero tengo un problema si intento insertar texto que contenga comillas simples que he aprendido.
[WebMethod]
public void bookRatedAdd(string title, int rating, string review, string ISBN, string userName)
{
OleDbConnection conn;
conn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;
Data Source=" + Server.MapPath("App_Data\\BookRateInitial.mdb"));
conn.Open();
OleDbCommand cmd = conn.CreateCommand();
cmd.CommandText = @"INSERT INTO bookRated([title], [rating], [review], [frnISBN], [frnUserName])VALUES('" + title + "', '" + rating + "','" + review + "','" + ISBN + "', '" + userName + "')";
cmd.ExecuteNonQuery();
conn.Close();
}
Por lo que tengo entendido, una de las formas de resolver el problema es mediante el uso de parámetros. Para ser honesto, no estoy seguro de cómo hacer esto. ¿Cómo podría cambiar el código anterior para insertar los datos utilizando parámetros?
Lo mismo que para cualquier otra consulta:
a) Reemplace los parámetros codificados reales en su OleDbCommand
con marcadores de posición (con el prefijo @
),
b) Agregue instancias de OleDbParameter
a la DbCommand.Parameters
propiedad. Los nombres de los parámetros deben coincidir con los nombres de los marcadores de posición.
[WebMethod]
public void bookRatedAdd(string title, int rating, string review, string ISBN, string userName)
{
using (OleDbConnection conn = new OleDbConnection(
"Provider=Microsoft.Jet.OleDb.4.0;"+
"Data Source="+Server.MapPath("App_Data\\BookRateInitial.mdb"));
{
conn.Open();
// DbCommand also implements IDisposable
using (OleDbCommand cmd = conn.CreateCommand())
{
// create command with placeholders
cmd.CommandText =
"INSERT INTO bookRated "+
"([title], [rating], [review], [frnISBN], [frnUserName]) "+
"VALUES(@title, @rating, @review, @isbn, @username)";
// add named parameters
cmd.Parameters.AddRange(new OleDbParameter[]
{
new OleDbParameter("@title", title),
new OleDbParameter("@rating", rating),
...
});
// execute
cmd.ExecuteNonQuery();
}
}
}
Tienes que usar Parámetro para insertar Valores. También es un problema de seguridad. Si lo hace así, se podría realizar una inyección SQL.
Prueba así:
string ConnString = Utils.GetConnString();
string SqlString = "Insert Into Contacts (FirstName, LastName) Values (?,?)";
using (OleDbConnection conn = new OleDbConnection(ConnString))
{
using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);
cmd.Parameters.AddWithValue("LastName", txtLastName.Text);
conn.Open();
cmd.ExecuteNonQuery();
}
}