使用用户输入的 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
,所以也许您需要将 SqlParameter
和 SqlDbType
替换为 SQLite
的相应类型
我有一个应用程序,我希望能够使用多个用户输入来搜索数据库,我有转账类型、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
,所以也许您需要将 SqlParameter
和 SqlDbType
替换为 SQLite