【问题标题】:SQLite search using user inputs使用用户输入的 SQLite 搜索
【发布时间】:2021-06-16 17:10:52
【问题描述】:

我有一个应用程序,我希望能够使用多个用户输入来搜索数据库,我有转账类型、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 个都被选中,那么要这样做吗?

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

【问题讨论】:

标签: c# winforms sqlite ado.net


【解决方案1】:

你可以先把你的逻辑放在另一个地方,所以你不需要那么多代码来选择

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 的相应类型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2017-09-03
    • 2015-11-25
    相关资源
    最近更新 更多