using System; using System.Data; using System.Data.SqlClient; using System.Data.OleDb; class sbc { static void Main(string[] args) { OleDbConnection source = new OleDbConnection(@"provider=vfpoledb;Data source=c:\temp\guids\guidtest.dbc"); SqlConnection dest = new SqlConnection(@"server=.\sqlexpress;trusted_connection=yes;database=test;"); DataTable tbl = new DataTable(); dest.Open(); // Read with a false where to grab schema from SQL server - like set fmtonly on/off SqlCommand cmd = new SqlCommand("select * from GuidTest where 1=2", dest); SqlDataReader sRdr = cmd.ExecuteReader(); tbl.Load(sRdr); // Load from source into existing schema source.Open(); OleDbCommand sourceCommand = new OleDbCommand(@"select * from " + args[0], source); OleDbDataReader dr = sourceCommand.ExecuteReader(); tbl.Load(dr); source.Close(); Console.WriteLine("Beginning Copy ...."); try { using (SqlBulkCopy s = new SqlBulkCopy(dest)) { s.BatchSize = 500; s.BulkCopyTimeout = 300; s.DestinationTableName = "GuidTest"; s.NotifyAfter = 10; s.SqlRowsCopied += new SqlRowsCopiedEventHandler(s_SqlRowsCopied); s.WriteToServer(tbl); s.Close(); } Console.WriteLine("Copy complete"); } catch (Exception e) { Console.WriteLine("{0} Exception caught", e); } finally { dest.Close(); } } static void s_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e) { Console.WriteLine("-- Copied {0} rows.", e.RowsCopied); } }It should be sligthly slower but still better than many other bulk loading options. I haven't tried timings on this.