Как вставить более 1000 записей с помощью SqlBulkCopy

Мне нужно вставить более 1000 записей в SQL Server. Но с помощью моего кода я могу вставить только 1000 записей. Пожалуйста, помогите мне.

using (SqlBulkCopy s = new SqlBulkCopy(dbConnection,SqlBulkCopyOptions.UseInternalTransaction, null))
{
     s.DestinationTableName = TableName;
     s.BatchSize = 10000;
     s.BulkCopyTimeout = 1800;
     foreach (var column in dt.Columns)
     {
         s.ColumnMappings.Add(column.ToString(), column.ToString());
     }
     s.WriteToServer(dt);
}

person Upasak Poddar    schedule 06.06.2016    source источник
comment
Что произойдет, если вы вставите 1001 запись?   -  person André Schild    schedule 06.06.2016
comment
Он вставляет только первые 1000 записей и отбрасывает все записи после 1000.   -  person Upasak Poddar    schedule 06.06.2016
comment
Достигает ли он вашего тайм-аута или это исключение, какие-то сообщения об ошибках?   -  person André Schild    schedule 06.06.2016
comment
он не генерирует никаких исключений. если я прокомментирую размер пакета и BulkCopyTimeout, то он сделает то же самое.   -  person Upasak Poddar    schedule 06.06.2016
comment
Как насчет объекта dt, может быть, вы передаете ему только 1000 строк?   -  person gofr1    schedule 06.06.2016
comment
У меня всего 1730 записей в объекте dt. Есть ли какие-либо ограничения в SqlBulkCopy? Или мне нужно внести какие-либо изменения в настройки SQL Server?   -  person Upasak Poddar    schedule 06.06.2016
comment
Вы, конечно, уверены, что массовое копирование не вставит более 1000 строк. т.е. вы не используете щелчок правой кнопкой мыши по таблице в студии управления, которая выбирает 1000 лучших, показывая вам только первые 1000 строк?   -  person larsts    schedule 06.06.2016
comment
@larsts, щелкнув правой кнопкой мыши по таблице в студии управления, дает мне 2 варианта: выбрать 1000 лучших и отредактировать до 200 строки.   -  person Upasak Poddar    schedule 06.06.2016
comment
Я пытался спросить, уверены ли вы, что таблица не содержит более 1000 строк после запуска вашего кода C #, кажется странным, что для массового копирования должно быть ограничение в 1000 строк. Но если вы выполните только выбор, созданный студией управления, база данных вернет только первые 1000 строк. Как вы проверяете, что вставлено только 1000 строк?   -  person larsts    schedule 06.06.2016
comment
Я использую запрос select * из TableName и возвращает только 1000 строк.   -  person Upasak Poddar    schedule 06.06.2016


Ответы (1)


Ниже приведен рабочий код в реальном времени, который я использовал в своем проекте для вставки объемных данных из Excel на сервер SQL.

Код С#:

public static DataSet Bindgrid_StoreInSQL(string path)
    {


            string strFileType = Path.GetExtension(path).ToLower();
            string connString = "";
            if (strFileType.Trim() == ".xls")
            {
                connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
            }
            else if (strFileType.Trim() == ".xlsx")
            {
                connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
            }
            string query = "SELECT * FROM [Sheet1$]";
            OleDbConnection conn = new OleDbConnection(connString);
            OleDbCommand cmd = new OleDbCommand(query, conn);
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            DataTable Exceldt = ds.Tables[0];

            //creating object of SqlBulkCopy    
            SqlBulkCopy objbulk = new SqlBulkCopy(OneStopMethods_Common.constring_Property);
            //assigning Destination table name    
            objbulk.DestinationTableName = "Tern_boq";


            objbulk.ColumnMappings.Add("ID", "ID");
            objbulk.ColumnMappings.Add("Bill_No", "Bill_No");
            objbulk.ColumnMappings.Add("Page_No", "Page_No");
            objbulk.ColumnMappings.Add("ItemNo", "ItemNo");
            objbulk.ColumnMappings.Add("Description", "Description");
            objbulk.ColumnMappings.Add("BOQ_Qty", "BOQ_Qty");
            objbulk.ColumnMappings.Add("UNIT", "UNIT");
            objbulk.ColumnMappings.Add("Category1", "Category1");
            objbulk.ColumnMappings.Add("Category2", "Category2");
            objbulk.ColumnMappings.Add("Category3", "Category3");
            objbulk.ColumnMappings.Add("Estimated_UnitRate", "Estimated_UnitRate");
            objbulk.ColumnMappings.Add("Estimated_Amount", "Estimated_Amount");



            //inserting Datatable Records to DataBase    
            conn.Open();
            objbulk.WriteToServer(Exceldt);


            SqlDatabase obj = new SqlDatabase(OneStopMethods_Common.constring_Property);
            string selquery = " select * from Tern_boq";
            return obj.ExecuteDataSet(CommandType.Text, selquery);




    }

Он отлично работает, надеюсь, это может дать вам некоторое представление, пожалуйста, дайте мне знать ваши мысли или предложения

person Karthik Elumalai    schedule 06.06.2016
comment
Работает нормально. Я могу вставить более 1000 строк. Спасибо чувак :) - person Upasak Poddar; 06.06.2016
comment
Мне очень приятно, и я очень рад, что смог вам помочь..:)..Пожалуйста, дайте мне знать, если что-то еще потребуется..Приятно поделиться..:) - person Karthik Elumalai; 06.06.2016
comment
oneStopMethods_Common.constring_Property не распознается. Мне нужно добавить ссылку на что-то?? - person glant; 03.05.2019
comment
Привет, это просто строка подключения, вы можете просто заменить ее следующим образом. Перед изменением: SqlDatabase obj = new SqlDatabase(OneStopMethods_Common.constring_Property); После изменения: SqlDatabase obj = new SqlDatabase (источник данных = имя сервера; исходный каталог = имя базы данных; идентификатор пользователя = имя пользователя; пароль = пароль); Примечание. В приведенной выше строке подключения замените имя сервера и имя базы данных соответствующим образом. это также может помочь вам: connectionstrings.com/sql-server Надеюсь, это поможет, поделитесь ваш отзыв спасибо - person Karthik Elumalai; 03.05.2019