Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Как обновить запись (желательно через запрос).


Автор: Fighter 8.7.2007, 00:32
Не получается обновить запись через диалоговое окно. Вот исходник:

Код

            if (dds.Disks.Rows.Count > 0)
            {
                AddDiskForm addForm = new AddDiskForm();
                int RecPos = this.BindingContext[dds, "Disks"].Position;
                addForm.textBox1.Text = dds.Disks[RecPos].Disc_Name;
                addForm.textBox2.Text = dds.Disks[RecPos].Disc_Have;
                addForm.textBox3.Text = dds.Disks[RecPos].Disc_Type;
                DialogResult dr = addForm.ShowDialog();
                if (dr == DialogResult.OK)
                {
                    dds.Disks[RecPos].Disc_Name = addForm.textBox1.Text;
                    dds.Disks[RecPos].Disc_Have = addForm.textBox2.Text;
                    dds.Disks[RecPos].Disc_Type = addForm.textBox3.Text;
                    SQLCommand.CommandText = "UPDATE    Disks" + Convert.ToChar(13);
                    SQLCommand.CommandText += " SET Disc_Name = " + "'" + dds.Disks[RecPos].Disc_Name + "'" + ", " + Convert.ToChar(13);
                    SQLCommand.CommandText += "Disc_Have = " + "'" + dds.Disks[RecPos].Disc_Have + "'" + "," + Convert.ToChar(13);
                    SQLCommand.CommandText += "Disc_Type = " + "'" + dds.Disks[RecPos].Disc_Type + "' " + Convert.ToChar(13);
                    SQLCommand.CommandText += "WHERE Disc_ID = " + dds.Disks[RecPos].Disc_ID;
                    MessageBox.Show(SQLCommand.CommandText);
                    oleDbConnection2.Open();
                    SQLCommand.ExecuteNonQuery();
                    DataTable dtAdded = dds.Disks.GetChanges(DataRowState.Modified);
                    if (dtAdded != null)
                    {
                        Discs.Update(dtAdded);
                        dtAdded.Dispose();
                    }
                    dds.AcceptChanges();
                    oleDbConnection2.Close();
                }
            }


Ну, тут можно догадаться что и зачем. В двух словах: Таблица с дисками (Имя, Наличие, Тип диска). Нужно через диалоговое окно обновлять записи. 
Я на C# пробую после Delphi и поэтому я привык все делать через запросы, если можно, покажите как чисто через запрос (ну, в примере есть что-то очень похожее но нерабочее). Если есть еще какие-то варианты, то тоже желательно покажите эти варианты. Спасибо заранее.

Автор: Idsa 8.7.2007, 11:39
Fighter, укажи, какой именно кусок кода работает неправильно и вариант чего именно ты хочешь узнать?

Автор: Fighter 8.7.2007, 13:24
Код

DataTable dtAdded = dds.Disks.GetChanges(DataRowState.Added);


Хмм, странно конечно, но вот с этой строчкой работает. 

Автор: Idsa 8.7.2007, 13:35
А что именно пишет?

Автор: Fighter 8.7.2007, 14:13
Ну если интересно то пишет он:

An unhandled exception of type 'System.Data.DBConcurrencyException' occurred in System.Data.dll

Additional information: Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.

Это когда строчка:

Код

                    DataTable dtAdded = dds.Disks.GetChanges(DataRowState.Modified);


Стоит её заменить:

Код

                    DataTable dtAdded = dds.Disks.GetChanges(DataRowState.Added);


этой строчкой и все пашет нормально. 

Автор: Idsa 8.7.2007, 16:34
Fighter, ну так эти 2 строчки выполняет абсолютно разные операции. И это не может быть причиной ошибки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)