0

私は SQLite を初めて使用し、SQLite データベース ファイルから最後の最後の行を読み込もうとしていますが、大量に失敗しています。

接続を正常に確立して行を取得できますが、行からデータを取得する方法がわかりません。

次のような「Mine」というテーブルがあります。

****************************************
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 に答える