У меня есть страница поиска с несколькими текстовыми полями и списками. Я хочу искать по одному полю или комбинации полей.
Я подключаюсь к базе данных MS ACCESS и отображаю в сетке.
Ниже мой код.
Я добавляю каждое условие в оператор if else, но чувствую, что добавляю все условие в if else невозможно.
Так есть ли лучший способ сделать это ??
Private DataTable getDataTable()
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\\Project.accdb");
string query;
OleDbCommand cmd;
OleDbDataAdapter adapter = new OleDbDataAdapter();
DataSet ds = new DataSet();
//Open the connection to db
con.Open();
var Merchant_ID = txt_MrchntID.Text;
var Chain_ID = txt_ChnID.Text;
var Reason_Code = txt_Reason.Text;
var Date_From = Text_Date_From.Text;
var Date_To = Text_Date_To;
var Amt_From = txt_Amount_From.Text;
var Amt_To = txt_Amount_To.Text;
var Status = SELECT_Status.Text;
var Tran_Type = Select_Trans_Type.Text;
//Search by only Merchant ID.
if (Merchant_ID.Length > 0 && Chain_ID == "" && Reason_Code = = "" && Date_From== "" && Amt_From = = "" && Status == "SELECT" && Tran_Type == "SELECT")
{
//Generating the query to fetch data
query = @"select * from table where I_MRCHNT = '" + txt_MrchntID.Text + "' ";
//cmd = new OleDbCommand(query, con);
adapter.SelectCommand = new OleDbCommand(query, con);
adapter.Fill(ds);
con.Close();
}
// Search by Merchant ID and Chain ID together.
else if (Merchant_ID.Length > 0 && Chain_ID.Length > 0 && Reason_Code == "" && Date_From == "" && Amt_From == "" && Status == "SELECT" && Tran_Type == "SELECT")
{
//Generating the query to fetch data
query = @"select * from table where I_MRCHNT = '" + txt_MrchntID.Text + "' and I_CHN = '" + txt_ChnID.Text + "' ";
cmd = new OleDbCommand(query, con);
adapter.SelectCommand = new OleDbCommand(query, con);
adapter.Fill(ds);
con.Close();
}
return ds.Tables[0];
}
Спасибо, Скотт, за ответ. Для моего проекта моя компания использует MS ACCESS в качестве БД, они планируют изменить БД в будущем, но в настоящее время должны интегрироваться с MS Access. Я собираюсь параметризовать запрос. Я пробовал использовать Entity framework, но вижу, что MS ACCESS не позволяет этого. Так есть ли другой способ сделать с MS ACCESS простым способом ?? что, если я добавлю все критерии в условие if (это будет более 50 комбинаций), тогда это повлияет на производительность ?? Спасибо
Немного погуглив, мне удалось найти платный сторонний провайдер, который позволит вам использовать доступ с помощью Entity framework.
Спасибо за информацию .. Я буду работать над этим. Ценю вашу помощь.
База данных Access действительно не предназначена для многопользовательского доступа, подобного этому, вы можете подумать о переходе на правильный sql-сервер (есть много бесплатных), вероятно, избавит вас от проблем в долгосрочной перспективе. Также вам никогда не нужно никогда помещать текст непосредственно в такие строки, вам нужно использовать параметры и передавать их таким образом. Также переключение на что-то вроде EntityFramework для обработки запросов к базе данных для вас значительно упростит то, что вы пытаетесь сделать.