Skip to content

Instantly share code, notes, and snippets.

@dasjestyr
Created July 23, 2013 02:57
Show Gist options
  • Save dasjestyr/6059523 to your computer and use it in GitHub Desktop.
Save dasjestyr/6059523 to your computer and use it in GitHub Desktop.
Bulk insert method. Hold the connection open while it runs multiple inserts
public class SqlFacade
{
public static bool ExecuteBulkNonQuery<T>(string connectionString, CommandType commandType,
string commandText, IEnumerable<T> listItems, Func<T,SqlParameter[]> setParameters)
{
var fails = 0;
using (var conn = new SqlConnection(connectionString))
{
using (var comm = new SqlCommand(commandText, conn))
{
comm.CommandType = commandType;
conn.Open();
foreach (var obj in listItems)
{
comm.Parameters.Clear();
// build a parameter array for this request object
comm.Parameters.AddRange(setParameters.Invoke(obj));
fails += comm.ExecuteNonQuery();
}
return fails != 0;
}
}
}
}
public class SampleCall
{
public MyResultObject RunTestCall(MyRequest request)
{
return
SqlFacade.ExecuteBulkNonQuery<MyResultObject>(
DatabaseConnection.ConnectionString,
CommandType.StoredProcedure,
"usp_ws_myStoredProcedureName",
request.SomeListOfItems,
item =>
{
// instructions on how to build the parameter list for each item
return new[]
{
new SqlParameter("@Parameter1", SqlDbType.Int){ Value = item.SomeInt },
new SqlParameter("@Parameter2", SqlDbType.VarChar){ Value = item.SomeString },
new SqlParameter("@Parameter3", SqlDbType.Decimal){ Value = item.SomeDecimal }
};
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment