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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Данные не сохраняються в БД 
V
    Опции темы
Chef
  Дата 14.12.2007, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 7.12.2007
Где: РК Павлодар

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



Да простят меня Модераторы   smile  (поиск в гугле не помог, а в форуме не искал, трафик на нуле  smile )

Проблема такая:
После выполнения SQL команды, если не закрывать текущее соединение с БД, то изминения там присутствую, а после закрытия они магическим образом исчезают  smile 
В БД я новенький, так что PLEASE помогите

Строка SQL и моя процедурка
Код

string sQueryString = @"UPDATE tbl_MusicName " +
                               @"     SET musicName = 'Du Hast UPDATE' " +
                               @"     WHERE musicID = 7";
                ExecutionsQueryToDataGrid(dbConnection, sConnectString, sQueryString, dtGrid);


Код процедурки  выриат 1
Код

OleDbCommand dbCommand = new OleDbCommand(sQuery, dbConnect);
dbCommand.ExecuteNonQuery();


Код процедурки  выриат 2
Код

OleDbDataAdapter dbAdapter = new OleDbDataAdapter(sQuery, _sConnectString);
DataSet DS = new DataSet();
dbAdapter.Fill(DS, "tbl_Music");
dbAdapter.Update(DS,"tbl_MusicName");

--------------------
Разговоры об IT
PM MAIL WWW   Вверх
thomas
Дата 14.12.2007, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Chef
Приветствую.
Если Вы поступаете примерно так
Код

// сначала заполняете таблицу в ДатаСет, вместо звездочки имена нужных полей через запятую.
string sQueryString = @"SELECT * FROM tbl_MusicName " ;
OleDbDataAdapter dbAdapter = new OleDbDataAdapter(sQueryString, _sConnectString);
DataSet DS = new DataSet();
dbAdapter.Fill(DS, "Music"); // именовать таблицы в ДатаСет лучше без прификсов, тогда сразу видно какую таблицу имеете в виду.
//Ту что в БД (её имя с префиксом) или ту что в ДатаСет (её имя без префикса)

После того как заполнили таблицу в ДатаСет отобразите данные из нее в DataGriedView или других контролах на форме. Произведите необходимые изменения данных. И после этого вызовите метод Update для вашего ДатаАдаптера. Команду на Update он сгенерирует сам, вам ничего писать не надо.
Код

dbAdapter.Update(DS,"Music");

В крайнем случае создайте обьект CommandBuilder и поручите ему создать команду Update
Код

cmdBuild = new OleDbCommandBuilder(dbAdapter);
dbAdapter.UpdateCommand = cmdBuild.GetUpdateCommand();
dbAdapter.Update(DS,"Music");

Можно перед этим еще выполнить проверку на изменения в ДатаСет
Код

if (DS.HasChanges(DataRowState.Added | DataRowState.Modified))
            {
                lblCount.Text = dbAdapter.Update(DS,"Music").ToString(); // в label получите число обновленных строк в таблице БД
            }

Успехов.


Это сообщение отредактировал(а) thomas - 14.12.2007, 09:52


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Chef
Дата 14.12.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 7.12.2007
Где: РК Павлодар

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



thomas,
Спасибо за ответ.
А если мне не надо выводить таблицу в ГРИД, можно ли обойтись без "SELECT * FROM ......"
Просто послать запрос SQL INSERT , UPDATE 

--------------------
Разговоры об IT
PM MAIL WWW   Вверх
thomas
Дата 14.12.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Chef
Приветствую.
При добавлении строк в таблицу вызывать данные в ДатаСет нет необходимости. Можно просто дать пользователю ввести данные в текстбоксы, например, и подставив эти значения в запрос INSERT INTO выполнить его при нажатии кнопки или Энтер на последнем текстбоксе.
Для Update по любому надо сначала получить данные из таблицы через селект(это может быть одна строка), показать их пользователю, он что-то там отредактировал и жмет на кнопку сохранить. И тут эти все данные подставляются в запрос Update и он выполняется(это если одна строка). Или вызывается метод Update твоего ДатаАдаптера. И он уже сам выполняет обновление.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Chef
Дата 14.12.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 7.12.2007
Где: РК Павлодар

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



thomas,
Еще раз спасибо
Сейчас попробую, об результате сообщу
--------------------
Разговоры об IT
PM MAIL WWW   Вверх
Chef
Дата 14.12.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 7.12.2007
Где: РК Павлодар

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



thomas,

Что то у меня не получилось вот пример кода
Код

//Запрос возращает 1 запись
string sQueryString = @"SELECT MusicName " +
                                  @"FROM tbl_MusicName " +
                                  @"WHERE MusicID = 7 ";

.......

OleDbDataAdapter dbAdapter = new OleDbDataAdapter(sQuery, _sConnectString);
DataSet DS = new DataSet();
dbAdapter.Fill(DS, "Music");
DS.Tables[0].Rows[0].ItemArray.SetValue("UPDATE BICH !!!!!!!",0); //Пытаюсь изминить
dbAdapter.Update(rows);


Почему не меняет !!!!!!

Это сообщение отредактировал(а) Chef - 14.12.2007, 19:53
--------------------
Разговоры об IT
PM MAIL WWW   Вверх
thomas
Дата 14.12.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Chef
Ответ тут
А вообще почему такой "извращенный" способ поменять значение в поле строки?
Почему не написать просто:
Код

DS.Tables[0].Rows[0]["Моё_крутое_поле"] = "UPDATE BICH !!!!!!!";


Добавлено через 11 минут и 53 секунды
Chef
вот тебе ссылка на раздел msdn о работе с данными.
Почитай, примеры довольно простые и понятные.

А это про обновление данных 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Chef
Дата 14.12.2007, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 7.12.2007
Где: РК Павлодар

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



Thomas
Похоже мы только с тобой тут и переписываемся  smile 

Мож я немного тупой, может просто сижу только после 23 00 smile 

С ДатаСет все ок, за ето тебе большое спасибо !

Но теперь он не хочет update' тить

Вот многострадальный код
Код

            OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.SelectCommand = new OleDbCommand(sQuery, dbConnect);
            OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
            
            DataSet DS = new DataSet();
            adapter.Fill(DS,"music");
            DS.Tables[0].Rows[0]["MusicName"] = "UPDATE BICH !!!!!!!";
            adapter.Update(DS, "music");


Thomas,
Если не затруднит напиши работоспособный кусок кода, подобный этому


ПОДОЖДИ ЕЩЕ НЕ ЗАХОДИЛ ПО ТВОИМ ССЫЛКАМ мож все проясниться


Это сообщение отредактировал(а) Chef - 14.12.2007, 22:51
--------------------
Разговоры об IT
PM MAIL WWW   Вверх
thomas
Дата 14.12.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Chef
вот sQuery это покажи.
Если это select, то должен выполняться метод update для датаАдаптера.

Добавлено @ 23:02
ЗЫ а ты вообще учишься или как?
Если учишься, то где и чему?
Не плохо бы твою программку увидеть, что изучаете?
Можешь в приват отписать. Тогда понятнее будет, о чем с тобой речь вести.


Это сообщение отредактировал(а) thomas - 14.12.2007, 23:02


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Chef
Дата 15.12.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 7.12.2007
Где: РК Павлодар

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



Thomas приветсвую.

Учусь на 3 курсе по спецальности Информатик. Углубления в базы данных небыло, но как я понимаю вещь это полезная, и мне потом ой как пригодиться. Поэтому я сижу и занимаюсь само обучением.

Для начала придумал себе програмку такую: типа База Муз Дисков

Состоит из 4 таблиц
tbl_group
groupID  groupName
Счетчик            VCHAR

tbl_disk
diskID  diskName
Счетчик            VCHAR

tbl_MusicName
MusicID  musicName
Счетчик            VCHAR

tbl_Music
MusicID  MusicName MusicDisk MusicGroup
Счетчик             INT              INT             INT

string sQueryString = @"SELECT MusicName FROM tbl_MusicName WHERE MusicID = 7"

Возвращает 1 запись которую нужно изменить

Команда  adapter.UpdateCommand = builder.GetUpdateCommand(); вызывает ошибку

Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.



--------------------
Разговоры об IT
PM MAIL WWW   Вверх
thomas
Дата 15.12.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Chef
Привет.
Вот теперь ронятно
Цитата

not return any key column information.

 В запросе на выборку не было первичного ключа, поэтому и не генериться команда.
Напиши так
Код

SELECT * FROM tbl_MusicName WHERE MusicID = 7




--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Chef
Дата 15.12.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 7.12.2007
Где: РК Павлодар

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



Thomas,
Здравствуй

Из составления запроса я понял ключевое поле обязателно, да ?

Теперь все идет без ошибок, в DataSet все меняеться, но в  базу данных он ничего не заносит smile 
Код

             OleDbDataAdapter adapter = new OleDbDataAdapter();
             adapter.SelectCommand = new OleDbCommand(sQuery, dbConnection);
             OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

             dbConnection.Open();
             DataSet customers = new DataSet();
             adapter.Fill(customers,"MusicName");

             DataRow[] rw = customers.Tables[0].Select(); // Проверяю че у нас там запрос принес
             customers.Tables[0].Rows[0]["MusicName"] = "UPDATE";
             adapter.Update(customers, "MusicName");

             dbConnection.Close();


Теперь в чем может быть проблема


Это сообщение отредактировал(а) Chef - 15.12.2007, 20:13
--------------------
Разговоры об IT
PM MAIL WWW   Вверх
Chef
Дата 18.12.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 7.12.2007
Где: РК Павлодар

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



Добавил команду обнавления в адаптер, результата ноль !!!!

Люди срочно помогите !!!  smile нервный срыв будет  smile 
Код

             OleDbDataAdapter adapter = new OleDbDataAdapter();
             adapter.SelectCommand = new OleDbCommand(sQuery, dbConnection);
             OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
             adapter.InsertCommand = builder.GetUpdateCommand();
             
             dbConnection.Open();

             DataSet customers = new DataSet();
             adapter.Fill(customers,"MusicName");

             DataRow[] rw = customers.Tables[0].Select(); // смотрим что там твориться
             customers.Tables[0].Rows[0]["nm"] = "UPDATE";

             adapter.Update(customers, "MusicName");
             dbConnection.Close();

--------------------
Разговоры об IT
PM MAIL WWW   Вверх
Enuviel
Дата 18.12.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот тут точно косяк
adapter.InsertCommand=builder.GetUpdateCommand();

Должно как минимум быть
       adapter.UpdateCommand = builder.GetUpdateCommand();

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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