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

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

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

понимаю, что прошу многого, но если несложно, можно хоть пару строк кода для примера?
...
Рейтинг: 0 / 0
Dataset & DataAdapter
    #35366125
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот на си шарпе пример(адаптировать к 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
Dataset & DataAdapter
    #35366138
noisette
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м-м-м... так ведь эта функция возвращает заполненный дататэйбл!
это и у мну получается безо всяких командбилдеров - возможно самонадеянно, но считаю себя в вопросах sql довольно крутым парнем ))) - я вот не понимаю, почему метод апдейт у мну отрабатывает впустую. тэйблмэппинг сделать? а зачем? датаадаптер смотрит только на одну таблицу. в параметры метода передается тоже только одна. и даже пробовал добавить строку с тэйблмэппингом - результат тот же, то есть нулевой.

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

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

Код: 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
Dataset & DataAdapter
    #35366240
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему я понял, чего вы хотите - одним адаптером загрузить таблу, а другим воткнуть в другую базу?
боюсь вас огорчить...
...
Рейтинг: 0 / 0
Dataset & DataAdapter
    #35366243
noisette
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пожалуй, я готов согласиться, что запрос при декларации второго адаптера - безобразие. подумал, что по аналогии с адо.рекордсетом, где при открытии можно было просто указать имя таблицы, пройдет. поправил. добавил командбилдер - но не понимаю, он же не выполняет никакого метода - достаточно декларации? в примере у меня в месседжбоксах поля и значения хорошо отображаются, но вот аффектид роуз = 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
Dataset & DataAdapter
    #35366245
noisette
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да. именно так, реализовать по сути дата флоу таск!
...
Рейтинг: 0 / 0
Dataset & DataAdapter
    #35366253
noisette
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но ведь это должно быть можно сделать! так как по сути дата сет - отсоединенные данные. никак не связанные с источником - и откуда пришел апдейт, из считанного из той же таблицы или откуда-то из другой базы - ведь должно быть неважно. разве нет?
...
Рейтинг: 0 / 0
Dataset & DataAdapter
    #35366262
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому - что при всей одинаковости первого и второго дата тэйблов, это все равно разные дататэйблы
...
Рейтинг: 0 / 0
Dataset & DataAdapter
    #35366288
noisette
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в данном случае я:
-- считаю в 2 дататэйбла данные двумя адаптерами из двух баз,
-- помещу оба дататэйбла в датасет,

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

или проще попытаться "объяснить" второму адаптеру, что таблица все-таки такая же?
каким образом? ну хоть общее направлене, не детально.
...
Рейтинг: 0 / 0
Dataset & DataAdapter
    #35366341
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему никак вы не объясните адаптеру, что это та - же таблица :)
вставку вы в цикле тока по моему можете сделать из одного дата тэйбла в другой
что - нибудь вроде этого псевдокода:
Код: 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
Dataset & DataAdapter
    #35366345
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в смысле
Код: 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
Dataset & DataAdapter
    #35366371
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noisette
что вы за сложности изобретаете? зачем вам датаТейблы если вы просто хотите перенести данные?

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

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

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

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

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

ВСЁ!

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

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

update
from
inner join

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

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

update
from
inner join

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

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

update
from
inner join

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

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

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


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