Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Dataset & DataAdapter / 25 сообщений из 32, страница 1 из 2
30.05.2008, 15:57
    #35346149
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
уважаемые конферяне, пытаюсь перейти с адо на адо.нет. позвольте мне один только вопрос. могу ли я принципиально загрузить в датасет данные датаадаптером из источника А (напимер, аксесса) и потом датаадаптером из датасета их перенести в получатель Б (например, на сервер)?
то есть по сути реализовать дата флоу таск?
читал про такие методы датаадаптера как
апдейд, инсерт/делит/комманд, но пока не понял, как вытащить данные из датасета...
если у вас вдруг есть пример кода, совсем будет замечательно )))
...
Рейтинг: 0 / 0
30.05.2008, 16:21
    #35346214
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
можешь.
правда,ты еще не понял что такое датасет :)
...
Рейтинг: 0 / 0
30.05.2008, 16:25
    #35346236
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
AlexeiKможешь.
правда,ты еще не понял что такое датасет :)

пасиб! что могу - главное. буду потихоньку разбираться.
а кусочка кода для примера нету?
...
Рейтинг: 0 / 0
10.06.2008, 08:36
    #35366042
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
уважаемые, обзавелся книжкой некоего Дэвида Сеппы по адо.нет. для примера пытаюсь из одной аксессовской базы в другую просто перенести данные из таблички в табличку. не важно, что это можно сделать средствами самого аксесса ))). создал две базы и в каждой создал по табличке ABC (Letter varchar(1), Code integer) - в табличку в первой базе внес три записи. Соотвественно, A - 65, B - 66, C- 67. Табличка во второй базе пустая.
Приведенным ниже скриптом пытаюсь перенести данные. Машина код выполняет, но ничего не делает и в месседжбоксе affected rows = 0. Подскажите, в чем моя ошибка?
...
Рейтинг: 0 / 0
10.06.2008, 08:55
    #35366064
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
Дэвид Сеппа ниче там не пишет про CommandBuilder случаем?
Заюзайте его в вашем примере.
...
Рейтинг: 0 / 0
10.06.2008, 09:31
    #35366109
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
SQL_Lamer ,

посмотрел. команд билдер ведь генерит запрос? запрос-то я и сам могу написать, только вот непонятно, как его потом передать методу апдейт датасета.

понимаю, что прошу многого, но если несложно, можно хоть пару строк кода для примера?
...
Рейтинг: 0 / 0
10.06.2008, 09:37
    #35366125
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
Вот на си шарпе пример(адаптировать к VB не проблема, думаю)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        protected DataTable GetDataTable(SqlCommand cmd, String connectionString)
        {
            SqlConnection con = new SqlConnection(connectionString);
            cmd.Connection = con;
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            SqlCommandBuilder db = new SqlCommandBuilder(da);
            DataTable dt = new DataTable();

            try
            {
                da.Fill(dt);

                return dt;
            }
            finally { if (con.State == ConnectionState.Open) con.Close(); }
        }
Вместо префикса Sql... само - собой OleDb..., остальное все так - же
...
Рейтинг: 0 / 0
10.06.2008, 09:45
    #35366138
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
м-м-м... так ведь эта функция возвращает заполненный дататэйбл!
это и у мну получается безо всяких командбилдеров - возможно самонадеянно, но считаю себя в вопросах sql довольно крутым парнем ))) - я вот не понимаю, почему метод апдейт у мну отрабатывает впустую. тэйблмэппинг сделать? а зачем? датаадаптер смотрит только на одну таблицу. в параметры метода передается тоже только одна. и даже пробовал добавить строку с тэйблмэппингом - результат тот же, то есть нулевой.

мне б вот пример метода апдейт датасета, если можно...

я могу решить задачу путем перебора записей дататэйбла, формирования текстового sql запроса и передачи его на выполнение объекту команд - но это на большом числе записей варварство - работать будет вечность...
...
Рейтинг: 0 / 0
10.06.2008, 09:48
    #35366142
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
ща напишу...
...
Рейтинг: 0 / 0
10.06.2008, 10:05
    #35366185
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
вот пример работы с дата адаптером и апдейт

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        public static void TestDb()
        {
            string constr = @"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = c:\db1.mdb";
            DataTable dt = new DataTable();
            OleDbDataAdapter da = new OleDbDataAdapter("select * from tblTest", constr);
            
            OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
            da.Fill(dt);
            dt.Rows[ 0 ][ 1 ] = "Vasya";
            da.Update(dt);
            
        }
ваш пример неграмотный, что это за строка запроса при создании второго адаптера?
...
Рейтинг: 0 / 0
10.06.2008, 10:21
    #35366240
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
по моему я понял, чего вы хотите - одним адаптером загрузить таблу, а другим воткнуть в другую базу?
боюсь вас огорчить...
...
Рейтинг: 0 / 0
10.06.2008, 10:22
    #35366243
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
пожалуй, я готов согласиться, что запрос при декларации второго адаптера - безобразие. подумал, что по аналогии с адо.рекордсетом, где при открытии можно было просто указать имя таблицы, пройдет. поправил. добавил командбилдер - но не понимаю, он же не выполняет никакого метода - достаточно декларации? в примере у меня в месседжбоксах поля и значения хорошо отображаются, но вот аффектид роуз = 0. у меня принципиальное непонимание модели адо.нет?

Код: plaintext
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.
Public Sub Main()

        Dim i As Integer

        Dim da1 As New OleDb.OleDbDataAdapter("SELECT * FROM ABC", ConnStr(db1))
        Dim da2 As New OleDb.OleDbDataAdapter("SELECT * FROM ABC", ConnStr(db2))
        
Dim dt As New Data.DataTable("ABC")

        da1.Fill(dt)
        For i =  0  To dt.Columns.Count -  1 
            MsgBox(dt.Columns(i).ColumnName.ToString)
        Next
        For i =  0  To dt.Rows.Count -  1 
            MsgBox(dt.Rows(i).Item( 0 ).ToString)
        Next

        Dim cb As New OleDb.OleDbCommandBuilder(da2)
        MsgBox(da2.Update(dt).ToString)

        da1.Dispose()
        da2.Dispose()
        dt.Dispose()

        Dts.TaskResult = Dts.Results.Success
    End Sub

...
Рейтинг: 0 / 0
10.06.2008, 10:23
    #35366245
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
да. именно так, реализовать по сути дата флоу таск!
...
Рейтинг: 0 / 0
10.06.2008, 10:25
    #35366253
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
но ведь это должно быть можно сделать! так как по сути дата сет - отсоединенные данные. никак не связанные с источником - и откуда пришел апдейт, из считанного из той же таблицы или откуда-то из другой базы - ведь должно быть неважно. разве нет?
...
Рейтинг: 0 / 0
10.06.2008, 10:29
    #35366262
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
потому - что при всей одинаковости первого и второго дата тэйблов, это все равно разные дататэйблы
...
Рейтинг: 0 / 0
10.06.2008, 10:38
    #35366288
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
если в данном случае я:
-- считаю в 2 дататэйбла данные двумя адаптерами из двух баз,
-- помещу оба дататэйбла в датасет,

могу ли в датасете произвести вставку из одной таблицы в другую и потом уже апдейтить?

или проще попытаться "объяснить" второму адаптеру, что таблица все-таки такая же?
каким образом? ну хоть общее направлене, не детально.
...
Рейтинг: 0 / 0
10.06.2008, 10:50
    #35366341
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
по моему никак вы не объясните адаптеру, что это та - же таблица :)
вставку вы в цикле тока по моему можете сделать из одного дата тэйбла в другой
что - нибудь вроде этого псевдокода:
Код: plaintext
1.
2.
3.
4.
5.
6.
For Each row In DataTable1.Rows
    Dim row1 as DataRow
    row1 = DataTable1.NewRow
    row1("name") = row("name")
    DataTable1.Rows.Add(row1)
Next
...
Рейтинг: 0 / 0
10.06.2008, 10:52
    #35366345
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
в смысле
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
For Each row In DataTable.Rows
    Dim row1 as DataRow
    row1 = DataTable1.NewRow
    row1("name") = row("name")
    DataTable1.Rows.Add(row1)
Next


...
Рейтинг: 0 / 0
10.06.2008, 11:01
    #35366371
WYPMAH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
noisette
что вы за сложности изобретаете? зачем вам датаТейблы если вы просто хотите перенести данные?

алгоритм ваших действий таков:

Код: plaintext
1.
2.
3.
4.
5.
- создали коннекшн;
- открыли транзакцию;
- выполнили выборку (комманд вам в помощь);
- прочитали выборку в цикле (ридер поможет);
- в цикле выполнили параметризированный инсерт (тот же комманд это умеет);
- закрыли транзакцию.

ВСЁ!
...
Рейтинг: 0 / 0
10.06.2008, 11:02
    #35366381
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
WYPMAH noisette
что вы за сложности изобретаете? зачем вам датаТейблы если вы просто хотите перенести данные?

алгоритм ваших действий таков:

Код: plaintext
1.
2.
3.
4.
5.
- создали коннекшн;
- открыли транзакцию;
- выполнили выборку (комманд вам в помощь);
- прочитали выборку в цикле (ридер поможет);
- в цикле выполнили параметризированный инсерт (тот же комманд это умеет);
- закрыли транзакцию.

ВСЁ!

просто человек думал, можно дата тэйблы подменить и с циклами не париться ;)
...
Рейтинг: 0 / 0
10.06.2008, 11:05
    #35366395
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
несомненно.
но есть сильное подозрение, что, положим, хотя бы жалкий миллион записей в цикле будет перебираться ну очень долго. нет?

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

update
from
inner join

заменили на циклический апдейт записей.
...
Рейтинг: 0 / 0
10.06.2008, 11:11
    #35366419
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
noisetteнесомненно.
но есть сильное подозрение, что, положим, хотя бы жалкий миллион записей в цикле будет перебираться ну очень долго. нет?

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

update
from
inner join

заменили на циклический апдейт записей.

Вы как делаете инсерт в T - SQL?
вы же пишете, что крутой парень в SQL
а ежели так, то знаете, что больше одного инсерта за раз сделать нельзя
Возможно есть технологии, которые инкапсулируют цикл,
однако цикл в любом случае присутствует
...
Рейтинг: 0 / 0
10.06.2008, 11:18
    #35366442
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
ну не стоит придираться так к словам )))
я понимаю, что машина все равно перебирает записи, а имел в виду, что если мы вместо уже упоминавшейся конструкции

update
from
inner join

будем использовать

declare cursor for select
while
update ...
where ...

то время исполнения возрастает до безобразия. курсоры и циклы в явном виде - зло )))
...
Рейтинг: 0 / 0
10.06.2008, 11:25
    #35366480
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
В общем, подводя итог:
в вашем случае я бы делал, как WYPMAH
если бы это был Sql Server, а не Access, то вообще делал бы это на сервере(в аксесе не знаю, нету наверное такой возможности)
Хочу вам еще книжку посоветовать на прощание - Боб Бошемин - Основы ADO.NET :)
...
Рейтинг: 0 / 0
10.06.2008, 11:27
    #35366489
noisette
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dataset & DataAdapter
благодарю, записал.
а латиницей его как?
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Dataset & DataAdapter / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]