2013-05-10 2 views
2

Что мне не хватает из следующего кода? В этом фрагменте кода я читаю таблицу из базы данных SQLite. Затем я обновляю ячейку, а затем читаю ее.Запись изменений в базу данных SQLite с использованием SqliteDataAdapter

Этот код является упрощенной версией более крупного кода, но это иллюстрирует проблему.

Код отлично читает таблицу, однако AcceptChanges() ничего не пишет. Я проверил это с повторным чтением и переходом на SQLiteAdmin и просмотром таблицы.

Я попытался добавить «oLocalAdapter.Update (oLocalSet.Tables [0]);» но это не имело никакого значения. Я видел, что это поиск.

using System.Data.SQLite; 

// DATABASE (Local): Formulate the SQL command. 
String strSqlCommand = "SELECT * FROM [tblTest] ORDER BY [IdPrimary] ASC;"; 
SQLiteCommand oLocalCommand = new SQLiteCommand(strSqlCommand, ClassEngine.Connection); 

// DATABASE (Local): Get the data records. 
SQLiteDataAdapter oLocalAdapter = new SQLiteDataAdapter(oLocalCommand); 
DataSet oLocalSet = new DataSet(); 
oLocalAdapter.Fill(oLocalSet, "tblTest"); 

// Try to write to some changes. 
String strValue = oLocalSet.Tables[0].Rows[0][8].ToString(); 
oLocalSet.Tables[0].Rows[0][8] = 9; 
oLocalSet.Tables[0].AcceptChanges(); 
oLocalAdapter.Update(oLocalSet.Tables[0]); 

// Clean up. 
oLocalSet.Dispose(); 
oLocalAdapter.Dispose(); 
oLocalCommand.Dispose(); 
oLocalCommand = null; 

ответ

3

Хорошо, понял.

Во-первых, мне пришлось переместить/изменить строку AcceptChanges().

Это включает в себя возможную линию

oLocalAdapter.AcceptChangesDuringUpdate = true; 

тогда я должен был добавить в

SQLiteCommandBuilder oBuilder = new SQLiteCommandBuilder(oLocalAdapter); 
oLocalAdapter.UpdateCommand = oBuilder.GetUpdateCommand(); 

последнюю строку, то обновление, и она работает. Это делает код:

// DATABASE (Local): Formulate the SQL command. 
String strSqlCommand = "SELECT * FROM tblTest ORDER BY IdPrimary ASC;"; 
SQLiteCommand oLocalCommand = new SQLiteCommand(strSqlCommand, ClassEngine.Connection); 

// DATABASE (Local): Get the data records. 
SQLiteDataAdapter oLocalAdapter = new SQLiteDataAdapter(oLocalCommand); 
DataSet oLocalSet = new DataSet(); 
oLocalAdapter.Fill(oLocalSet, "tblTest"); 

// 
SQLiteCommandBuilder oBuilder = new SQLiteCommandBuilder(oLocalAdapter); 

// Try to write to some changes. 
String strValue = oLocalSet.Tables[0].Rows[0][8].ToString(); 
oLocalSet.Tables[0].Rows[0][8] = 9; 
strValue = oLocalSet.Tables[0].Rows[0][8].ToString(); 
oLocalSet.AcceptChanges(); 
oLocalAdapter.UpdateCommand = oBuilder.GetUpdateCommand(); 
oLocalAdapter.Update(oLocalSet.Tables[0]); 

// Clean up. 
oLocalSet.Dispose(); 
oLocalAdapter.Dispose(); 
oLocalCommand.Dispose(); 
oLocalCommand = null; 
0
public void SaveDataTable(DataTable DT) 
     { 
     try 
      { 
      con.Open(); 
      cmd = con.CreateCommand(); 
      cmd.CommandText = string.Format("SELECT * FROM {0}", DT.TableName); 
      adapter = new SQLiteDataAdapter(cmd); 
      SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter); 
      adapter.Update(DT); 
      con.Close(); 
      } 
     catch (Exception Ex) 
      { 
      System.Windows.MessageBox.Show(Ex.Message); 
      } 
+1

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