【问题标题】:Having trouble getting last row from SQLite database从 SQLite 数据库获取最后一行时遇到问题
【发布时间】:2013-11-18 17:24:45
【问题描述】:

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

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

我有一个表,叫做“我的”,比如:

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

我正在尝试从任务列的最后一行获取数据,它是字符串类型。

但是:

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

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

【问题讨论】:

    标签: c# .net sql winforms sqlite


    【解决方案1】:

    更改您的查询以选择按id 降序排列的最后一个task

    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 对数据进行排序,所以第一行是最后插入的。

    【讨论】:

    • descdescending 的快捷方式,表示将id 从最高值到最低值排序:)
    • 谢谢!出于某种原因,我认为 desc 的意思是“描述”,因此有点混乱:P lol
    猜你喜欢
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多