Prateek gsharma Ответов: 3

Я получаю ошибку "не удается обновить идентификатор" в таблице обновлений.plz помогите мне решить эту проблему


Я получаю ошибку "не удается обновить идентификатор" в таблице обновлений.plz помогите мне решить эту проблему

Что я уже пробовал:

частная dataGridView1_CellContentClick недействительным(объект отправителя, DataGridViewCellEventArgs е)
{
если (dataGridView1.Колонки[Эл.ColumnIndex].Name == "Отправить")
{
using (OleDbConnection con1 = new OleDbConnection(con))
{
вы видите con1.Открыть();
for (int i = 0; i < dataGridView1.Rows.Граф; i++)
{
OleDbCommand cmd = новая OleDbCommand();
УМК.Подключение = видите con1;
//строки запроса query1 = ("вставить в отчеты (удостоверение личности,комментарии,отметки,рецензент,ReviewerDate) значения(@ИД@замечания@знаки,'" + окружающая среда.Имя Пользователя + "',Сейчас Же)");
строка запроса query1 = ("обновить отчеты установите ID = @ID,с комментариями = @комментариями,знаки = @знаки,рецензент = @РВР ReviewerDate = @rvrd где(ИД = @ИД)");
cmd.параметры.AddWithValue ("@id", dataGridView1.Rows[i].Ячейки[0].Значение);
cmd.параметры.AddWithValue ("@comments", dataGridView1.Rows[i].Ячейки[5].Значение);
cmd.параметры.AddWithValue ("@marks", dataGridView1.Rows[i].Ячейки[6].Значение);
cmd.параметры.AddWithValue ("@rvr", dataGridView1.Rows[i].Ячейки[8].Значение);
cmd.параметры.AddWithValue("@rvrd", dataGridView1.Rows[i].Ячейки[9].Значение);

УМК.CommandText = query1;
УМК.Метод executenonquery();

}
Ящик для сообщений.Show("Комментарии Отправлены", "Сообщение", MessageBoxButtons.Хорошо, MessageBoxIcon.Информация);
}
}

3 Ответов

Рейтинг:
2

MadMyche

Наиболее вероятная проблема заключается в том, что ИДЕНТИФИКАТОР скорее всего, это Идентичность колонка для таблицы.
Если вы посмотрите на сам фактический оператор SQL

Update    Reports
set       ID = @id
,         Comments = @comments
,         marks = @marks
,         Reviewer = @rvr
,         ReviewerDate = @rvrd
Where    (ID = @id)

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

Поэтому все, что вам нужно сделать, это удалить эту часть команды SQL...
Update    Reports
set       Comments = @comments
,         marks = @marks
,         Reviewer = @rvr
,         ReviewerDate = @rvrd
Where    (ID = @id)

..- и тогда тебе будет хорошо идти.
Предполагая, что ИДЕНТИФИКАТОР является ли столбец идентичности естественным


Prateek gsharma

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

Prateek gsharma

частная dataGridView1_CellContentClick недействительным(объект отправителя, DataGridViewCellEventArgs е)
{
если (dataGridView1.Колонки[Эл.ColumnIndex].Name == "Отправить")
{
using (OleDbConnection con1 = new OleDbConnection(con))
{
вы видите con1.Открыть();
for (int i = 0; i < dataGridView1.Rows.Граф; i++)
{
OleDbCommand cmd = новая OleDbCommand();
УМК.Подключение = видите con1;
//строки запроса query1 = ("вставить в отчеты (удостоверение личности,комментарии,отметки,рецензент,ReviewerDate) значения(@ИД@замечания@знаки,'" + окружающая среда.Имя Пользователя + "',Сейчас Же)");
строка запроса query1 = ("обновление отчетов замечаний = @комментариями,знаки = @знаки,рецензент = @РВР ReviewerDate = @rvrd где (ИД = @ИД)");
cmd.параметры.AddWithValue ("@id", dataGridView1.Rows[i].Ячейки[0].Значение);
cmd.параметры.AddWithValue ("@comments", dataGridView1.Rows[i].Ячейки[5].Значение);
cmd.параметры.AddWithValue ("@marks", dataGridView1.Rows[i].Ячейки[6].Значение);
cmd.параметры.AddWithValue ("@rvr", dataGridView1.Rows[i].Ячейки[8].Значение);
cmd.параметры.AddWithValue("@rvrd", dataGridView1.Rows[i].Ячейки[9].Значение);

УМК.CommandText = query1;
УМК.Метод executenonquery();

}
Ящик для сообщений.Show("Комментарии Отправлены", "Сообщение", MessageBoxButtons.Хорошо, MessageBoxIcon.Информация);
}
}

Prateek gsharma

даже несмотря на внесенные изменения в мой запрос ... значения не обновляются.

никаких изменений в ценностях.этот запрос не обновляет никаких значений

MadMyche

Вы пробовали это непосредственно на SQL?

Prateek gsharma

строка запроса query1 = ("обновление отчетов замечаний = @комментариями,знаки = @знаки,рецензент = @РВР ReviewerDate = @rvrd где (ИД = @ИД)");

В базе данных access
Идентификатор тип данных "счетчик"
ID размер поля длинное целое число
Новые значения : инкремент


Но вышеприведенный запрос не вносит никаких изменений в пертикулярный столбец/строку
есть ли еще какой-нибудь запрос для внесения изменений в базу данных?

Prateek gsharma

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

Prateek gsharma

никто не может решить мою проблему?

MadMyche

Теперь, когда я знаю, что мы работаем с AccessDB, это указывает на возможную проблему с кодом => Вы используете библиотеку OleDB для подключения к БД, которая не поддерживает именованные параметры; все параметры должны быть ? (вопросительные знаки) и параметры должны быть добавлены в том же порядке, в каком они указаны в команде.
https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=против 110).aspx

Рейтинг:
1

OriginalGriff

Вдобавок к тому, что говорит Натан, подумайте об этом: даже если бы вы могли обновить значение идентификатора, есть ли в этом какой-то смысл?

Update Reports set ID = @id,Comments = @comments,marks = @marks,Reviewer = @rvr,ReviewerDate = @rvrd Where(ID = @id)
Учитывая, что предложение WHERE гарантирует, что будут изменены только строки с идентификатором, установленным в определенное значение, какой эффект будет иметь попытка установить идентификатор в это конкретное значение?


Prateek gsharma

строка запроса query1 = ("обновление отчетов замечаний = @комментариями,знаки = @знаки,рецензент = @РВР ReviewerDate = @rvrd где (ИД = @ИД)");

В базе данных access
Идентификатор тип данных "счетчик"
ID размер поля длинное целое число
Новые значения : инкремент


Но вышеприведенный запрос не вносит никаких изменений в пертикулярный столбец/строку
есть ли еще какой-нибудь запрос для внесения изменений в базу данных?

Prateek gsharma

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

Рейтинг:
0

Nathan Minier

Поскольку идентификатор-это идентификатор строки, вы не сможете изменить его таким образом. Исправьте эту линию:

string query1 = ("Update Reports set Comments = @comments,marks = @marks,Reviewer = @rvr,ReviewerDate = @rvrd Where(ID = @id)");


Prateek gsharma

если я это сделаю so....it не обновляется в базе данных.

Nathan Minier

Хорошо, вы получаете ошибку на этом этапе?

Prateek gsharma

ошибки нет, но отображаются только более ранние значения

Nathan Minier

Убедитесь, что параметр ID передается правильно и правильно отражает тип идентификатора в базе данных.

Prateek gsharma

я передал его правильно, но он не обновляет никаких значений

Nathan Minier

Итак, имеет ли учетная запись, на которой запущено приложение, права на обновление?

Prateek gsharma

да

Nathan Minier

Хорошо, тогда вам нужно устранить неполадки в вашем SQL и сделать пошаговую проверку вашего кода. Наиболее вероятный сценарий для no exception/no update заключается в том, что предложение "WHERE" оператора ничего не находит, но если вы уверены, что ID передается правильно и что ID существует в базе данных, я не уверен, что еще это будет основано на вашем примере кода.

Prateek gsharma

строка запроса query1 = ("обновление отчетов замечаний = @комментариями,знаки = @знаки,рецензент = @РВР ReviewerDate = @rvrd где (ИД = @ИД)");

В базе данных access
Идентификатор тип данных "счетчик"
ID размер поля длинное целое число
Новые значения : инкремент


Но вышеприведенный запрос не вносит никаких изменений в пертикулярный столбец/строку
есть ли еще какой-нибудь запрос для внесения изменений в базу данных?

Nathan Minier

Вы не упомянули, что это база данных Access, поэтому она может вести себя по-другому. Эта строка должна быть в порядке, если она работает так же, как и любая другая реализация SQL.

Prateek gsharma

он работает только с SQL.как я обновление данных в Datagriview с помощью кнопки в элементе управления datagridview

Prateek gsharma

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