0

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

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

4

1 回答 1

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

于 2013-11-07T06:51:59.940 回答