Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление БД из потока 
:(
    Опции темы
Afrodiziac
Дата 24.6.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Ситуация такова, есть БД, и есть поток. В БД есть одна таблица.
Она обновляется из главного потока приложения с помощью функции

Код

void ФункцияПотока()
{
            ...
            //str - массив SQL строк например 
            //"INSERT INTO `Table` (`Name`, `Value`) VALUES ('Новый клиент',57)"

            for (int i = 0; i < str.Length; i++)
            {
                        TempCommand.CommandText = str[i];
                        TempCommand.ExecuteNonQuery();
            }
            
            ОбновитьБазуДанных();
            ....

}


Код

private void ОбновитьБазуДанных(DataRowState Состояние)
{
            this.datadapter.Update(this.ds.GetChanges(Состояние).Tables[0]);
            this.ds.Clear();
            this.datadapter.Fill(ds, "Cust");
}


В потоке я получаю некоторые строки SQL кода которые я должен выполнить в потоке, но там генерится ошибка на строке 

Код

this.datadapter.Update(this.ds.GetChanges(Состояние).Tables[0]);


во время попытки обновить БД.

Ошибка такая: Object reference not set to an instance of an object.

Обращение к объектам формы осуществить можно с помощью делигатов, использованием метода Invoke(). Но например у datadapter нет такого метода.

PS: Поправил вопрос


Это сообщение отредактировал(а) Afrodiziac - 24.6.2007, 17:27
PM MAIL   Вверх
QryStaL
Дата 24.6.2007, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: нет
Всего: 32



А ошибку указать? Телепаты в отпуске  smile 


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Naum
Дата 31.7.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: нет
Всего: 15



Afrodiziac, а у тебя  в коде есть где-нибудь строчки типа 
Код

this.datadapter = new SqlDataAdapter(.....);


Это сообщение отредактировал(а) Naum - 31.7.2007, 17:49


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
ivashkanet
Дата 23.8.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 4
Всего: 149



Цитата(Afrodiziac @  24.6.2007,  14:07 Найти цитируемый пост)
this.datadapter.Update(this.ds.GetChanges(Состояние).Tables[0]);

Если именно на этой строчке, то вариантов всего несколько:
Код

1) this.datadapter == null
2) this.ds == null
3) this.ds.GetChanges(Состояние) == null
4) this.ds.GetChanges(Состояние).Tables[0] == null


Чтобы проверить где именно null и, вообще, не сталкиваться с такой проблемой в будущем предлагаю писать так:
Код

DataSet changedData = this.ds.GetChanges(Состояние);

if (changedData.Tables.Length>0)
{
    DataTable firstChangedTable = changedData.Tables[0];

    this.datadapter.Update(firstChangedTable);
}


P.S. Скорости отработки моего (если убрать if) и твоего кода в Релизе(!) отличаться не будут. Компилятор сам соптимизирует эту конструкцию.

Это сообщение отредактировал(а) ivashkanet - 23.8.2007, 14:58
PM MAIL WWW ICQ   Вверх
zaver
Дата 7.9.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 15.8.2005

Репутация: нет
Всего: 3



Цитата(Naum @ 31.7.2007,  17:48)
Afrodiziac, а у тебя  в коде есть где-нибудь строчки типа 
Код

this.datadapter = new SqlDataAdapter(.....);


=)
поищи в дебаггере, что же всетаки not set to an instance of an object должно помочь)

Это сообщение отредактировал(а) zaver - 7.9.2007, 22:30
PM MAIL WWW ICQ Skype YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.