Aggiunta di più variabili parametrizzate a un database in c #

Sto cercando di fare qualcosa di simile a questo punto: Come inserisco più righe SENZA ripetere la parte “INSERT INTO dbo.Blah” dell’istruzione? eccetto che oltre a fare questo in una query (più veloce di diverse decine) voglio anche farlo parametrizzato dato che l’input proviene dal web.

Attualmente ho

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(); } 

Il che è un po ‘lento (si noti che il vero esempio ha molte più colonne ma che renderebbe le cose più confuse).

Poiché stai utilizzando c# e sql server 2008 , puoi utilizzare un parametro con valori di tabella per inserire più righe nel tuo database. Ecco una breve descrizione su come fare questo:

Innanzitutto, è necessario creare un tipo di tabella definito dall’utente:

 CREATE TYPE MyTableType AS TABLE ( Col1 int, Col2 varchar(20) ) GO 

Quindi, è necessario creare una stored procedure che accetti questo tipo di tabella come parametro

 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 

Infine, esegui questa stored procedure dal tuo codice c #:

 DataTable dt = new DataTable(); dt.Columns.Add("Col1", typeof(int)); dt.Columns.Add("Col2", typeof(string)); // Fill your data table here using (SqlConnection con = new SqlConnection("ConnectionString")) { SqlCommand cmd = new SqlCommand("MyProcedure", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@MyTable", SqlDbType.Structured).Value = dt; con.Open(); cmd.ExecuteNonQuery(); con.Close(); } 

È ansible utilizzare la syntax SQL:

 INSERT INTO YOUR_TABLE (dataColumn) VALUES (data1),(data2),(data3) 

Quindi fai un loop sulle tue righe che vuoi inserire e aggiungi “, (datax)” alla tua query e aggiungi anche il parametro corrispondente. Forse aiuta.