Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DataAdapter.Update / 25 сообщений из 31, страница 1 из 2
02.04.2005, 13:09
    #32994627
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
cmInsert = new OleDbCommand("INSERT INTO Предметы(subject_name_rus, subject_name_eng) VALUES(@subject_name_rus, @subject_name_eng)", coJDiploma);
			cmInsert.Parameters.Add(new OleDbParameter("@subject_name_rus", OleDbType.VarChar, 255, ParameterDirection.Input, false, 0, 0, "subject_name_rus", DataRowVersion.Original, null));
			cmInsert.Parameters.Add(new OleDbParameter("@subject_name_eng", OleDbType.VarChar, 255, ParameterDirection.Input, false, 0, 0, "subject_name_eng", DataRowVersion.Original, null));
			cmUpdate = new OleDbCommand("UPDATE Предметы SET subject_name_rus=@subject_name_rus AND subject_name_eng=@subject_name_eng WHERE id=@id", coJDiploma);
			cmUpdate.Parameters.Add(new OleDbParameter("@id", OleDbType.Integer, 10, ParameterDirection.Input, false, 0, 0, "id", DataRowVersion.Original, null));
			cmUpdate.Parameters.Add(new OleDbParameter("@subject_name_rus", OleDbType.VarChar, 255, ParameterDirection.Input, false, 0, 0, "subject_name_rus", DataRowVersion.Original, null));
			cmUpdate.Parameters.Add(new OleDbParameter("@subject_name_eng", OleDbType.VarChar, 255, ParameterDirection.Input, false, 0, 0, "subject_name_eng", DataRowVersion.Original, null));
			cmDelete = new OleDbCommand("DELETE * FROM Предметы WHERE id=@id", coJDiploma);
			cmDelete.Parameters.Add(new OleDbParameter("@id", OleDbType.Integer, 10, ParameterDirection.Input, false, 0, 0, "id", DataRowVersion.Original, null));
			daJDiploma.InsertCommand = cmInsert;
			daJDiploma.UpdateCommand = cmUpdate;
			daJDiploma.DeleteCommand = cmDelete;
код сохранения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
foreach(ListViewItem lvi in lvAllSubjects.Items)
			{
				if(lvi.SubItems[2].Text != "0")
				{
					dsSubjects.Tables["Предметы"].Select("id="+lvi.SubItems[2].Text)[0][1] = lvi.SubItems[0].Text;
					dsSubjects.Tables["Предметы"].Select("id="+lvi.SubItems[2].Text)[0][2] = lvi.SubItems[1].Text;
				}
				else
					dsSubjects.Tables["Предметы"].Rows.Add(new object[]{null, lvi.Text, lvi.SubItems[1].Text});
			}
			daJDiploma.Update(dsSubjects.Tables["Предметы"]);
ошибка
System.Data.DBConcurrencyException: Concurrency violation: the UpdateCommand affected 0 records.
вопрос простой из-за чего?
...
Рейтинг: 0 / 0
02.04.2005, 13:33
    #32994648
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
похоже, что ты используешь OleDb. там параметры - позиционные, т.е. их надо добвлять в коллекцию в поряке, в котором они встречаются в SQL запросе.
например для Update:
@subject_name_rus
@subject_name_eng
@id

ЗЫ
как правило используют знак вопроса для параметров (?), хотя некоторые провайдеры понимают и @
...
Рейтинг: 0 / 0
02.04.2005, 13:38
    #32994651
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
+
для параметров с новыми значениями нужно использовать текущую версию DataRow. оригинальная версия - только для параметров, входящих в WHERE кляузу (поиск)
...
Рейтинг: 0 / 0
02.04.2005, 13:45
    #32994652
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
мг, спасибо щас попробуем
...
Рейтинг: 0 / 0
02.04.2005, 13:52
    #32994656
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
обрати внимание на синтаксис
UPDATE Предметы SET subject_name_rus=@subject_name_rus AND subject_name_eng=@subject_name_eng WHERE id=@idнаверное, должна быть запятая
...
Рейтинг: 0 / 0
02.04.2005, 14:26
    #32994675
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
да записи престали дублироватся и остальные глюки ушли, а вот ? вместо @ не понемает, странно.
...
Рейтинг: 0 / 0
02.04.2005, 14:27
    #32994676
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
например, для INSERT
Код: plaintext
INSERT INTO Предметы(subject_name_rus, subject_name_eng) VALUES(?, ?) 
...
Рейтинг: 0 / 0
02.04.2005, 14:44
    #32994689
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
ну AND он понимает только что в самом Access проверял
для Insert ? просто писать не указывая имени параметра?
это из-зи того что они ты говориш в коллекции в поряке идут?
...
Рейтинг: 0 / 0
02.04.2005, 14:46
    #32994693
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
а как сдесь
Код: plaintext
cmInsert.Parameters.Add(new OleDbParameter("@subject_name_rus", OleDbType.VarChar,  255 , ParameterDirection.Input, false,  0 ,  0 , "subject_name_rus", DataRowVersion.Current, null));
будет выглядеть тогда
...
Рейтинг: 0 / 0
02.04.2005, 14:51
    #32994695
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
без разницы. параметры позиционные и имя параметра (ограничение - уникальнсть) - только для себя, чтобы удобно было вытаскивать по этому имени из коллекции.
...
Рейтинг: 0 / 0
02.04.2005, 15:01
    #32994696
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
я имею введу нужно @ или ?ставить в
Код: plaintext
1.
cmInsert.Parameters.Add(new OleDbParameter("@subject_name_rus", OleDbType.VarChar,  255 , ParameterDirection.Input, false,  0 ,  0 , "subject_name_rus", DataRowVersion.Current, null));
...
Рейтинг: 0 / 0
02.04.2005, 15:07
    #32994699
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
можешь указывать все что угодно :)
это имя - ТОЛЬКО ДЛЯ ТВОЕГО УДОБСТВА РАБОТЫ С КОЛЛЕКЦИЕЙ ПАРАМЕТРОВ . OleDb его не использует.
...
Рейтинг: 0 / 0
02.04.2005, 15:51
    #32994721
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
Гуд, все прекрасно заработало InsertCommand выполняется
но я в затруднении со следующим DeleteCommand по какому принципу работает с удаленными из таблицы записями??
...
Рейтинг: 0 / 0
02.04.2005, 16:05
    #32994727
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
для каждой записи в состоянии DataRowState.Deleted выбирается из оригинального состояния значение id и выдается DELETE.
...
Рейтинг: 0 / 0
02.04.2005, 16:11
    #32994729
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
у меня не работает ни DeleteCommand, ни UpdateCommand
...
Рейтинг: 0 / 0
02.04.2005, 16:12
    #32994732
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
выкладывай текст программы (как в первом посте)
...
Рейтинг: 0 / 0
02.04.2005, 16:46
    #32994747
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
+
судя по всему ты используешь Access и поле Id в твоей таблице - это Autonumber.
как ты возвращаешь его значение в DataTable после вставки (INSERT) новой записи в БД ?
...
Рейтинг: 0 / 0
02.04.2005, 17:46
    #32994779
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
выкладываю
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
dsSubjects = new DataSet("AllSubjects");
coJDiploma = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source=jdiploma.mdb");
daJDiploma = new OleDbDataAdapter();
cmInsert = new OleDbCommand("INSERT INTO Предметы(subject_name_rus, subject_name_eng) VALUES(?, ?)", coJDiploma);
cmInsert.Parameters.Add(new OleDbParameter("@subject_name_rus", OleDbType.VarChar,  255 , ParameterDirection.Input, false,  0 ,  0 , "subject_name_rus", DataRowVersion.Current, null));
cmInsert.Parameters.Add(new OleDbParameter("@subject_name_eng", OleDbType.VarChar,  255 , ParameterDirection.Input, false,  0 ,  0 , "subject_name_eng", DataRowVersion.Current, null));
cmUpdate = new OleDbCommand("UPDATE Предметы SET subject_name_rus=? AND subject_name_eng=? WHERE id=?", coJDiploma);
cmUpdate.Parameters.Add(new OleDbParameter("@subject_name_rus", OleDbType.VarChar,  255 , ParameterDirection.Input, false,  0 ,  0 , "subject_name_rus", DataRowVersion.Current, null));
cmUpdate.Parameters.Add(new OleDbParameter("@subject_name_eng", OleDbType.VarChar,  255 , ParameterDirection.Input, false,  0 ,  0 , "subject_name_eng", DataRowVersion.Current, null));
cmUpdate.Parameters.Add(new OleDbParameter("@id", OleDbType.Integer,  10 , ParameterDirection.Input, false,  0 ,  0 , "id", DataRowVersion.Original, null));
cmDelete = new OleDbCommand("DELETE * FROM Предметы WHERE id=?", coJDiploma);
cmDelete.Parameters.Add(new OleDbParameter("@id", OleDbType.Integer,  10 , ParameterDirection.Input, false,  0 ,  0 , "id", DataRowVersion.Original, null));
			daJDiploma.InsertCommand = cmInsert;
			daJDiploma.UpdateCommand = cmUpdate;
daJDiploma.DeleteCommand = cmDelete;
вот с Update ПРоблемы
Код: plaintext
1.
2.
3.
lvi.Text = dlg_edit.SubjectNameRus;
lvi.SubItems[ 1 ].Text = dlg_edit.SubjectNameEng;
dsSubjects.Tables["Предметы"].Select("id="+lvi.SubItems[ 2 ].Text)[ 0 ].ItemArray[ 1 ] = dlg_edit.SubjectNameRus;
dsSubjects.Tables["Предметы"].Select("id="+lvi.SubItems[ 2 ].Text)[ 0 ].ItemArray[ 2 ] = dlg_edit.SubjectNameEng;
просто неудобство с ListView работать и еще при таком раскладе получается что записи в базел и в таблице вместо строк выдает 0 или -1, а почему не знаю
...
Рейтинг: 0 / 0
02.04.2005, 19:00
    #32994822
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
Код: plaintext
dsSubjects.Tables["Предметы"].Select("id="+lvi.SubItems[2].Text)[0].ItemArray[1] = dlg_edit.SubjectNameRus;
не понял, что это значит.

dsSubjects.Tables["Предметы"].Select("id="+lvi.SubItems[2].Text) - получешь массив DataRow
[0] - берешь из массива первую строку
ItemArray - получаешь временный массив значений полей строки
[1]=... во временном массиве меняешь значение

НО в DataRow никаких значений не заносишь. все твои исправления - просто в воздух (во временный массив).

в первом посте было лучше :)

и остался вопрос: как ты возвращаешь значение поля Id в DataTable после вставки (INSERT) новой записи в БД ?

---
и еще, попробуй вместо OleDbType.VarChar использовать OleDbType.VarWChar.
...
Рейтинг: 0 / 0
02.04.2005, 19:38
    #32994841
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
кузяНО в DataRow никаких значений не заносишь. все твои исправления - просто в воздух (во временный массив).
будем теперь знать исправлю то я уже чудил как мог.
кузяи остался вопрос: как ты возвращаешь значение поля Id в DataTable после вставки (INSERT) новой записи в БД ?
понятия не имею, а зачем это делать, если я понял вопрос правильно то:
все изменения у меня происходят когда пользователь закрывает окно.
...
Рейтинг: 0 / 0
02.04.2005, 19:46
    #32994847
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
JeSert...и еще при таком раскладе получается что записи в базе и в таблице вместо строк выдает 0 или -1, а почему не знаюэто числовые значения для False и True в Acceess (булевый тип). может это наведет тебя на какие нибудь мысли ?
...
Рейтинг: 0 / 0
02.04.2005, 19:57
    #32994854
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
морачую голову себе и другим а ничего не получается UpdateCOmmand не работает я изменил на 1 вариант в отладке показывает что добавил в DataSet
кстати что значит в Watch когда значение красным выделено
...
Рейтинг: 0 / 0
02.04.2005, 20:01
    #32994857
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
c 0, -1 получается закономерность, у меня в ListView 2 Columns если ввожу значение в левый тогда 0, если в правый - -1
...
Рейтинг: 0 / 0
02.04.2005, 22:18
    #32994904
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
если проект не очень большой - сархивируй (лучше zip) только тексты и выложи здесь. дальше уже нужно смотреть его работу.
...
Рейтинг: 0 / 0
03.04.2005, 11:39
    #32995081
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataAdapter.Update
вот эта формачка
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DataAdapter.Update / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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