Agregar mĂșltiples variables parametrizadas a una base de datos en c#
sql sql-server (2)
Como está utilizando
c#
y
sql server 2008
, puede usar un parámetro con valores de tabla para insertar varias filas en su base de datos.
Aquí hay una breve descripción de cómo hacer esto:
Primero, debe crear un tipo de tabla definida por el usuario:
CREATE TYPE MyTableType AS TABLE
(
Col1 int,
Col2 varchar(20)
)
GO
Luego, debe crear un procedimiento almacenado que acepte este tipo de tabla como parámetro
CREATE PROCEDURE MyProcedure
(
@MyTable dbo.MyTableType READONLY -- NOTE: table valued parameters must be Readonly!
)
AS
INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2
FROM @MyTable
GO
Finalmente, ejecute este procedimiento almacenado desde su código C #:
DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(int));
dt.Columns.Add("Col2", typeof(string));
// Fill your data table here
using (var con = new SqlConnection("ConnectionString"))
{
using(var cmd = new SqlCommand("MyProcedure", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MyTable", SqlDbType.Structured).Value = dt;
con.Open();
cmd.ExecuteNonQuery();
}
}
Estoy buscando hacer algo similar aquí: ¿Cómo inserto varias filas SIN repetir la parte "INSERT INTO dbo.Blah" de la declaración? excepto que además de hacer esto en una consulta (más rápido que varias docenas) también quiero hacer esto parametrizado ya que la entrada proviene de la web.
Actualmente tengo
foreach(string data in Scraper){
SqlConnection conn = new SqlConnection(WebConfigurationManager.AppSettings["ConnectionInfo"].ToString());
string query = "INSERT INTO DATABASE(''web'',@data)";
SqlCommand sqlCommand= new SqlCommand(query, conn);
sqlCommand.Parameters.AddWithValue("@data", data);
Command.executeNonQuery();
conn.close();
}
Lo cual es un poco lento (tenga en cuenta que el ejemplo real tiene muchas más columnas, pero eso haría las cosas más confusas).
Puede hacer uso de la sintaxis SQL:
INSERT INTO YOUR_TABLE (dataColumn) VALUES (data1),(data2),(data3)
Así que recorra sus filas que desea insertar y agregue ", (datax)" a su consulta y también agregue el parámetro correspondiente. Quizás ayude.