It's not the loop itself that causes your method to be slow. It's the fact that you execute a database-INSERT for each entry in your datagrid individually.
1) Move the database-Insert-Stuff out of your loop (With Cm .... End With)
2) In your loop, concatenate all the Insert-Statements into one Batch-Statement, preferably using a StringBuilder
*
3) When your loop is done, your database-Insert executes that one "big" Insert-Statement in one go.
Edit: There are also some other improvements you can make, first and foremost to use Sql-Parameters. Please refer to one of my previous answers:
How to insert datetime in sql server 2008 using VB 2010?[
^]
*
Edit: I'm talking here about concatenating the "full" Insert-Statements into a so-called Batch-Statement. Not about concatenating a single Insert-Statement like you currently do, from multiple string-literals and variables. That should be done instead with Sql-Parameters which allows to write the Insert-Statement either as one single string-literal when not using a Batch-Statement, or with a formatted string-literal for building a Batch-Statement with different Sql-Parameter-Names for each Insert-Statement.