Есть ли что-то похожее на SqlBulkCopy в VBA (Excel)? - PullRequest
1 голос
/ 24 мая 2019

В C # я использую System.Data.SqlClient и делаю что-то вроде кода ниже. Есть ли что-то похожее в VB (Excel)?

    { static void InsertDataIntoSQLServerUsingSQLBulkCopy(DataTable csvData) 

            string connetionString = null; 
            SqlConnection cnn; 
            connetionString = System.Configuration.ConfigurationManager.ConnectionStrings["Import"].ConnectionString;

        cnn = new SqlConnection(connetionString); 
            cnn.Open(); 
            using (SqlBulkCopy s = new SqlBulkCopy(cnn)) 
            { 
                s.DestinationTableName = "dbo.MyTable"; 
                foreach (var column in csvData.Columns) 
                    s.ColumnMappings.Add(column.ToString(), column.ToString()); 
                s.WriteToServer(csvData); 
            } 

Я пытаюсь экспортировать данные из моей таблицы из Excel в SQL Server. Я не могу использовать массовую вставку, потому что файл находится на другом компьютере, поэтому SQL не может его прочитать.

Итак, я попытался сделать что-то подобное в VB (Excel):

Dim recSet As New ADODB.Recordset
Dim fieldIndex As Long
Dim rowIndex As Long
Set recSet = New ADODB.Recordset
Sqlstr = "Select * from MyTable"
recSet.Open Sqlstr, con, adOpenDynamic, adLockOptimistic


     For rowIndex = 2 To 10000
                recSet.AddNew
                    For fieldIndex = 1 To 9
                 recSet.Fields(Cells(1, fieldIndex).Value) = Replace(Sheets("MyTable").Cells(rowIndex, fieldIndex).Value, ",", ".")
                Next fieldIndex
    Next rowIndex
    recSet.UpdateBatch

Но есть тысячи строк, и каждая строка вставляется в SQL с помощью собственного оператора INSERT. Это занимает много времени и ресурсов сервера. Можно ли оптимизировать это?

...