2013-11-07 3 views
0

Я новичок в SQLite, и я пытаюсь прочитать последнюю последнюю строку из файла базы данных SQLite и терпеть неудачу в массовом порядке.Проблемы с получением последней строки из базы данных SQLite

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

У меня есть таблица, которая называется «Шахта», как:

**************************************** 
id | name | age | time | task 
0 | tommy| 23 | [time]| went to shops 
**************************************** 

Я пытаюсь получить данные из последней строки колонки задачи, которая имеет тип String.

Но:

  1. Я не знаю, как читать данные из строки в C# строки, и;
  2. Я не знаю, как структурировать оператор select, чтобы он возвращал только одно значение из последней строки.

Ниже то, что я уже, что в основном из учебника я нашел в Интернете (который я не могу найти снова пока):

namespace MyApp 
{ 
    public partial class Form1 : Form 
    { 
     private SQLiteConnection sql_con; 
     private SQLiteCommand sql_cmd; 
     private SQLiteDataAdapter DB; 
     private DataSet DS = new DataSet(); 
     private DataTable DT = new DataTable(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void SetConnection() 
     { 
      string databasePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\MyApp\database.db"; 
      sql_con = new SQLiteConnection 
       ("Data Source=" + databasePath + ";Version=3;"); 
     } 

     private void ExecuteQuery(string txtQuery) 
     { 
      SetConnection(); 
      sql_con.Open(); 
      sql_cmd = sql_con.CreateCommand(); 
      sql_cmd.CommandText = txtQuery; 
      sql_cmd.ExecuteNonQuery(); 
      sql_con.Close(); 
     } 

     private void LoadData() 
     { 
      bool gotRow = false; 
      try 
      { 
       SetConnection(); 
       sql_con.Open(); 
       sql_cmd = sql_con.CreateCommand(); 
       string CommandText = "select task from Mine"; 
       DB = new SQLiteDataAdapter(CommandText, sql_con); 
       DS.Reset(); 
       DB.Fill(DS); 
       DT = DS.Tables[0]; 

       foreach (DataRow row in DT.Rows) 
       { 
        gotRow = true; 
       } 

       if (gotRow) 
       { 
        MessageBox.Show(row.ToString()); 
        gotRow = false; 
       } 

       sql_con.Close(); 
      } 
      catch(Exception exception) 
      { 
       Debug.WriteLine(exception.Message); 
      } 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      LoadData(); 
     } 
    } 
} 

Что я делаю не так? Как я могу получить данные из последней строки?

ответ

3

Изменить запрос, чтобы выбрать последний task отсортированы по убыванию id:

select task 
from Mine 
order by id desc 
limit 1 

затем в ваш метод должен выглядеть следующим образом ::

private void LoadData() 
{ 
    try 
    { 
     SetConnection(); 
     sql_con.Open(); 
     sql_cmd = sql_con.CreateCommand(); 
     string commandText = "select task from Mine order by id desc limit 1"; 

     sql_cmd.CommandText = commandText; 
     var lsattask = sql_cmd.ExecuteScalar().ToString(); 

     MessageBox.Show(lsattask); 

     sql_con.Close(); 
    } 
    catch(Exception exception) 
    { 
     Debug.WriteLine(exception.Message); 
    } 
} 

ExecuteScalar возвращает результат из первой строки в первой колонке потому что мы заказали данные по id первой строкой, вставленной последним.

+0

Спасибо @gzaxx, работает отлично! Кстати, что такое 'desc'? – uSeRnAmEhAhAhAhAhA

+0

'desc' является ярлыком для' убывания' и означает заказать 'id' с наибольшего значения до самого низкого :) – gzaxx

+0

спасибо! По какой-то причине я думал, что desc означает «описание», следовательно, легкая путаница: P lol – uSeRnAmEhAhAhAhAhA

Смежные вопросы