С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 12.11.2011
Сообщений: 48

Как сделать быстрее заполнение таблицы в БД тысячью строк

27.11.2011, 18:10. Показов 2030. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Мне нужно добавить в таблицу в БД Oracle много строк (более тысячи) за раз.
Я умею добавлять одну строчку. Но делать это в цикле тысячу раз ..очень долго, ведь каждый раз открывается новая транзакция, добавляется строчка, затем COMMIT и т.д. Как сделать добавление в рамках одной транзакции (на сколько я понимаю)?

примерный кусок кода, который сейчас у меня

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
OracleConnection cn = new OracleConnection(conn_string);
                using (cn)
                {
                   cn.Open();
                   OracleCommand createRecord= cn.CreateCommand();
                                for (int j = 0; j < 2000; j++)
                                {
                                    createRecord.CommandText = "insert into MyTable values (:a,:b,:x,:y)";
                                    createRecord.Parameters.Add(new OracleParameter("a", данные1));
                                    createRecord.Parameters.Add(new OracleParameter("b", данные2));
                                    createRecord.Parameters.Add(new OracleParameter("x", данные3));
                                    createRecord.Parameters.Add(new OracleParameter("y", данные4));
                                                                
                                    createRecord.ExecuteNonQuery();
                                    
                                }
                  cn.Close();
              }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.11.2011, 18:10
Ответы с готовыми решениями:

DataGridView как сделать быстрее работу программы (скрытие ненужных строк)
Событие должно скрывать строчки в таблице clientDataGridView, код работает очень долго. Как увеличить эффективность? private void...

Как сделать заполнение таблицы из txt в datagridview
Как можно сделать так, чтобы из файла где все записано через пробел, чтобы автоматически заполнилась по нажатию кнопки в datagridview ...

Заполнение части строк из файла в comboBox, как сделать?
В файле хранится прайс-лист продукции некоторой фирмы (название товара, цена). Выбирая из списка некоторое название, получить цену этого...

6
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
27.11.2011, 18:28
1. Создать DataSet.
2. Написать адаптер.
3. Вызвать у адаптера метод Update.
4. Возможно еще есть другой метод, если Вы скажите откуда берутся данные.
1
2 / 2 / 0
Регистрация: 12.11.2011
Сообщений: 48
27.11.2011, 19:03  [ТС]
для оракла это подойдет?
данные - обычные числа в массиве, который формируется в ходе работы програмы
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
27.11.2011, 19:06
desAlex, а почему нет?
0
2 / 2 / 0
Регистрация: 12.11.2011
Сообщений: 48
27.11.2011, 19:22  [ТС]
хорошо, попробую
позже здесь отпишусь

вроде такой примерно код должен быть? (непонял как DataSet в моем случае использовать)

C#
1
2
3
4
5
6
7
8
9
10
OleDbConnection oleDbConnection = new OleDbConnection(connStr);
OleDbDataAdapter m_dataAdapter = new OleDbDataAdapter();
 
for (int j = 0; j < 2000; j++)
             {
                 String inComm="insert into MyTable values ("+a[j]+","+b[j]+","+x[j]+","+y[j]+")";
                 m_dataAdapter.InsertCommand = new OleDbCommand(inComm,oleDbConnection);
             }
m_dataAdapter.Update();
oleDbConnection.Close();
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
27.11.2011, 19:56
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Linq;
using System.Data;
using MySql.Data.MySqlClient;
using System.Windows.Forms;
 
class Program
{
    static void Main(string[] args)
    {
        const int n = 10000;
        string[] a = Enumerable.Range(0, n).
            Select(i => "Item" + i.ToString()).ToArray();
        string[] b = Enumerable.Range(0, n).
            Select(i => "Item" + i.ToString()).ToArray();
        string[] x = Enumerable.Range(0, n).
            Select(i => "Item" + i.ToString()).ToArray();
        string[] y = Enumerable.Range(0, n).
            Select(i => "Item" + i.ToString()).ToArray();
        long start = DateTime.Now.Millisecond;
        MySqlConnection connection = new MySqlConnection("Server=localhost;Database=test;Uid=root;Pwd=1;");
        DataSet dataSet = new DataSet();
        MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM sample;", connection);
        adapter.InsertCommand = new MySqlCommand("INSERT INTO sample(a, b, x, y) VALUES (?a, ?b, ?x, ?y)", connection);
        adapter.InsertCommand.Parameters.Add("?a", MySqlDbType.VarChar, 255, "a");
        adapter.InsertCommand.Parameters.Add("?b", MySqlDbType.VarChar, 255, "b");
        adapter.InsertCommand.Parameters.Add("?x", MySqlDbType.VarChar, 255, "x");
        adapter.InsertCommand.Parameters.Add("?y", MySqlDbType.VarChar, 255, "y");
        adapter.Fill(dataSet, "sample");
        BindingSource bindingSource = new BindingSource(dataSet, "sample");
        for (int i = 0; i < n; i++)
        {
            DataRow row = (bindingSource.AddNew() as DataRowView).Row;
            row["a"] = a[i];
            row["b"] = b[i];
            row["x"] = x[i];
            row["y"] = y[i];
            bindingSource.EndEdit();
        }
        adapter.Update(dataSet, "sample");
        Console.WriteLine(DateTime.Now.Millisecond - start);
        Console.ReadKey(true);
    }
}
1
2 / 2 / 0
Регистрация: 12.11.2011
Сообщений: 48
28.11.2011, 00:17  [ТС]
все, проблема решена. большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.11.2011, 00:17
Помогаю со студенческими работами здесь

Как сделать выборку строк таблицы и закрасить цветом
while($myrow = mysql_fetch_array($result)) { echo'&lt;tr&gt;'; echo'&lt;td&gt;'.&quot;&lt;input type=checkbox class='example_check'...

Как сделать копирование и вставку строк таблицы для дерева?
Имеется таблица базы данных. На основании таблицы формируется дерево. Как выполнить &quot;копировать&quot;/&quot;вставить&quot; для...

Автоматическое заполнение некоторых строк таблицы
В общем есть программа. Когда произвожу заполнение таблиц в ней, то всё приходится делать вручную, хоть и стоят связи в БД. Правда в конце...

Заполнение нескольких строк одной таблицы
Здравствуйте! Собственно вопрос такой: как из одной формы заполнить несколько строк одной таблицы? Суть: Имеем одну работу, в...

Заполнение таблицы и выделение строк в ней
Добрый.Пишу в Visual studon на си# проект в form application Задача состоит в составлении расписания.В столбце фамилия в строках дата и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru