Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
desAlex
2 / 2 / 0
Регистрация: 12.11.2011
Сообщений: 48
1

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

27.11.2011, 18:10. Просмотров 1261. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2011, 18:10
Ответы с готовыми решениями:

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

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

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

Нужно сделать подзапросы в одной таблице. Как сделать быстрее?
Решил упорядочить статистику 'посетителей'. Вроде бы все просто собираю в...

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

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

вроде такой примерно код должен быть? (непонял как 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
Петррр
6168 / 3469 / 898
Регистрация: 28.10.2010
Сообщений: 5,928
27.11.2011, 19:56 6
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
desAlex
2 / 2 / 0
Регистрация: 12.11.2011
Сообщений: 48
28.11.2011, 00:17  [ТС] 7
все, проблема решена. большое спасибо!
0
28.11.2011, 00:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 00:17

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

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

Заполнение строк левого главного столбца таблицы
Добрый. Создал бд. Создал таблицу. Пишу на с#. Проблема в том,что данные...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru