Хорошо, это может быть немного длинно, но, пожалуйста, потерпите меня. Я искал вверх и вниз, и я не могу найти четкого ответа на мою конкретную проблему.
Как указано выше, я использую DataSet
s для извлечения, редактирования, вставки и обновления записей в базе данных. Однако все остальные функции работают должным образом, кроме вставки. Что происходит, так это то, что когда я вставляю новые записи в набор данных, все выглядит нормально, так как с помощью функции просмотра я могу видеть новые записи в наборе данных. Но после того, как я закончу редактирование, приму изменения и сделаю обновление, в базу данных будет отправлена только одна запись. См. код ниже. Я также использовал некоторые крепления.
Там код разбит на разные функции следующим образом: SetAdapaterCommands
, FillDataSets
, SendToDatabase
и BindToUI
. Может ли кто-нибудь увидеть что-то не так?
Или есть что-то в том, как работают команды вставки и обновления набора данных, что мне не хватает?
Я должен также сказать, что я обновляю другую родительскую таблицу перед этой. Не уверен, что это как-то связано.
Запустить набор команд адаптера
Выберите команду
#region Select Task Command
queryString = "SELECT value1, value2, value3 FROM Table1;";
taskCommand = new SqlCommand(queryString, connection);
#endregion Select Task Command
Команда обновления
#region Update Task Command
queryString = "UPDATE Table1 SET value1 = @value1, value2 = @value2, value3 = @value3" +
"WHERE value1 = @value1;";
taskUpdateCommand = new SqlCommand(queryString, connection);
taskUpdateCommand.Parameters.Add("@value1", SqlDbType.Char, 10, "value1");
taskUpdateCommand.Parameters.Add("@value2", SqlDbType.Char, 10, "value2");
taskUpdateCommand.Parameters.Add("@value3", SqlDbType.VarChar, 50, "value3");
taskAdapter.UpdateCommand = taskUpdateCommand;
SqlParameter taskParameter = taskUpdateCommand.Parameters.Add("@oldValue1", SqlDbType.Char, 10, "value1");
taskParameter.SourceVersion = DataRowVersion.Original;
#endregion Update Task Command
Вставить команду
#region Insert Task Command
queryString = "INSERT INTO Table1 (value1, value2, value3) " +
"VALUES (@value1, @value2, @value3);";
taskInsertCommand = new SqlCommand(queryString, connection);
taskInsertCommand.Parameters.Add("@value1", SqlDbType.Char, 10, "value1");
taskInsertCommand.Parameters.Add("@value2", SqlDbType.Char, 10, "value2");
taskInsertCommand.Parameters.Add("@value3", SqlDbType.VarChar, 50, "value3");
taskAdapter.InsertCommand = taskInsertCommand;
#endregion Insert Task Command
Конец набора команд адаптера
Заполнить набор данных
private void loadFromDatabase()
{
#region Load Data and From Database
SetAdapterCommands();
#region Load Tasks
try
{
connection.Open();
taskAdapter.SelectCommand = taskCommand;
taskAdapter.Fill(Table1DataSet);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
#endregion Load Tasks
}
Отправить изменения в базу
private void updateDatabase()
{
try
{
Table1BindingSource.EndEdit();
Table1DataSet.AcceptChanges();
taskAdapter.Update(Table1DataSet);
}
catch(System.Exception ex)
{
MessageBox.Show("Update Failed");
}
}
Привязать к пользовательскому интерфейсу
textBoxValue1.DataBindings.Add("Text", Table1BindingSource, "value1");
textBoxValue2.DataBindings.Add("Text", Table1BindingSource, "value2");
textBoxValue3.DataBindings.Add("Text", Table1BindingSource, "value3");