使用用户输入的 SQLite 搜索

SQLite search using user inputs

我有一个应用程序,我希望能够使用多个用户输入来搜索数据库,我有转账类型、2 位数之间的转账金额和日期选择器输入,我已经设置好了,所以我能够根据传输类型进行搜索很好,然后涉及使用 2 个或所有 3 个输入进行搜索,是否有快速设置方法,或者只是有大量 if 语句来检测已选择哪些输入的情况?

private void searches()
    {
        if (cb_Transfer_Type.SelectedIndex < 5)
        {
            // search using the parameters selected
            using (SQLiteCommand cmd = conn.CreateCommand())
            {
                try
                {
                    cmd.CommandText = @"SELECT * FROM tranx WHERE action = '" + cb_Transfer_Type.SelectedItem + "' AND accid = '" + Global.selectedAccountID + "';";

                    da_Transfers = new SQLiteDataAdapter(cmd.CommandText, conn);
                    dt_Transfers = new DataTable();
                    da_Transfers.Fill(dt_Transfers);
                    dgv_Transfers.DataSource = dt_Transfers;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        if(cb_Transfer_Type.SelectedIndex == 5)
        {
            // search using the parameters selected
            using (SQLiteCommand cmd = conn.CreateCommand())
            {
                try
                {
                    cmd.CommandText = @"SELECT * FROM tranx WHERE accid = '" + Global.selectedAccountID + "';";

                    da_Transfers = new SQLiteDataAdapter(cmd.CommandText, conn);
                    dt_Transfers = new DataTable();
                    da_Transfers.Fill(dt_Transfers);
                    dgv_Transfers.DataSource = dt_Transfers;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        
    }

这就是我的基于传输类型搜索的代码,它只是一个例子吗 如果选择了转账类型和金额,则执行此操作

如果选择了所有 3 个,那么执行此操作吗?

是否有更快或更整洁的方式来进行这些类型的搜索?

嗯,你可以先把你的逻辑放在另一个地方,这样你的选择就不需要那么多代码了

private void searches()
    {
        // search using the parameters selected
        using (SQLiteCommand cmd = conn.CreateCommand())
        {
            try
            {
                cmd.CommandText = "SELECT * FROM tranx WHERE accid = @accid ";
                cmd.Parameters.Add(new SqlParameter("@accid", SqlDbType.Int) { Value = Global.selectedAccountID });

                if (cb_Transfer_Type.SelectedIndex < 5)
                {
                   cmd.CommandText += 'AND Global.selectedAccountID = @selectedAccountID';
                   cmd.Parameters.Add(new SqlParameter("@selectedAccountID", SqlDbType.Int) { Value cb_Transfer_Type.SelectedItem });
                }

                da_Transfers = new SQLiteDataAdapter(cmd.CommandText, conn);
                dt_Transfers = new DataTable();
                da_Transfers.Fill(dt_Transfers);
                dgv_Transfers.DataSource = dt_Transfers;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

我不知道 SQLiteCommand,所以也许您需要将 SqlParameterSqlDbType 替换为 SQLite

的相应类型