无法从SQLite数据库获取最后一行

时间:2013-11-07 06:46:45

标签: c# .net sql winforms sqlite

我是SQLite的新手,我正在尝试从SQLite数据库文件中读取最后一行并且大量失败。

我可以成功建立连接并获取行,但我不知道如何从行中获取数据。

我有一张名为“我的”的表,如:

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

我正在尝试从任务列的最后一行获取数据,该列的类型为String。

可是:

  1. 我不知道如何将行中的数据读入C#String,并且<; li>
  2. 我不知道如何构造select语句,以便它只返回最后一行的那个单值。
  3. 以下是我的内容,主要来自我在网上找到的教程(我还没有找到):

    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();
            }
        }
    }
    

    我做错了什么?如何从最后一行获取数据?

1 个答案:

答案 0 :(得分: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排序数据,第一行是最后一行插入的。