2014-09-07 4 views
1

В моей базе данных у меня есть таблица с именем Question1, с начальным состоянием по умолчанию присвоенного = 0, то каждый раз, когда я хочу обновить Я хочу, чтобы статус = 1, я использую командузаписи Обновления в Sqlite Window Phone 8

await conn.ExecuteAsync("UPDATE question1 SET Status = '1' WHERE id =" + ques1.id); 

но не работает. Кто знает, что здесь не так? Вот код для чтения данных и обновления таблицы ...

public async Task<question1> get_data_question1() 
{ 
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection("Database"); 
    var query = conn.Table<question1>().Where(x => x.Status == 0); 
    var result = await query.ToListAsync(); 
    question1 ques1 = new question1(); 
    foreach (var item in result) 
    { 
     ques1.id = item.id; 
     ques1.Status = item.Status; 
    } 
    // Update 
    await conn.ExecuteAsync("UPDATE question1 SET Status = '1' WHERE id =" + ques1.id); 
    return ques1; 
} 
+0

Какой ценность ques1.id есть? Есть ли идентификатор столбца в вашей таблице? Есть хорошая ссылка w3shools на команды sql: http://www.w3schools.com/sql/sql_update.asp –

+0

В таблице вопроса у меня есть 2 идентификатора и статуса столбца. ques1.id является идентификатором значения записи в базе данных –

+0

Я имею в виду, что точка прерывания перед conn.ExecuteAsync, каково значение отладки ques1.id? –

ответ

0

Вот как я установил бы вашу простую базу данных.

Это создаст 3 записи со всеми Status = 0.

Поставьте точку останова на строке, где я сказал, так и в коде;

Вы увидите после этого запроса всех значений 0 были обновлены до 1.

using SQLite; 
using System.IO; 
using System.IO.IsolatedStorage; 
using System.Threading.Tasks; 

public class Question 
{ 
    [SQLite.PrimaryKey, SQLite.AutoIncrement] 
    public int Id { get; set; } 
    public int Status { get; set; } 
} 

public partial class MainPage : PhoneApplicationPage 
{ 
    string dbPath = ""; 
    public MainPage() 
    { 
     InitializeComponent(); 
     dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");       

     CreateDBTable(); 
     InsertDB();   // only call this once (comment it out the next time you deploy) 
     UpdateDB(); 

    } 
} 

// from the MSDN example 
private async Task<bool> FileExists(string fileName) 
{ 
    var result = false; 
    try 
    { 
     var store = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName); 
     result = true; 
    } 
    catch 
    { 
    } 
    return result; 
} 

public void CreateDBTable() 
{ 
    if (!FileExists("db.sqlite").Result) 
    { 
     using (var db = new SQLiteConnection(dbPath)) 
     { 
      db.CreateTable<Question>(); 
     } 
    } 
} 

public void UpdateDB() 
{ 
    using (var db = new SQLiteConnection(dbPath)) 
    { 
     var existing = db.Query<Question>("SELECT * FROM Question WHERE Status = 0"); 
     if (existing != null) 
     { 
      foreach(Question q in existing) 
      { 
       db.Execute("UPDATE Question SET Status = 1 WHERE Id = ?", q.Id); 
      } 
     } 


     // query again to see if has changed 
     existing.Clear(); 

     existing = db.Query<Question>("SELECT * FROM Question WHERE Status = 1"); 
     if (existing != null) 
     { 
      int breakpoint_here = 1; 
     } 

    } 
} 

private void InsertDB() 
{ 
    using (var db = new SQLiteConnection(dbPath)) 
    { 
     db.RunInTransaction(() => 
     { 
      db.Insert(new Question() { Status = 0 }); 
      db.Insert(new Question() { Status = 0 }); 
      db.Insert(new Question() { Status = 0 }); 
     }); 
    } 
}