#c# #oledb
#c# #oledb
Вопрос:
Я создал код таблицы и хотел бы выполнить поиск и получить ответ, вводящий IMEI устройства в текстовом поле IMEI, и когда я нажимаю на поиск, я хочу отобразить результат code_mck
в коде текстового поля, в котором я хочу отобразить результат:
id Imei code_mck
1 356885021519453 830782136
2 356885021519156 948790617
3 356885021518893 715398945
4 356885021518935 567456626
5 359654022104377 557960750
Изначально у меня типичная трехуровневая архитектура, и метод поиска находится на уровне данных. У меня возникли некоторые проблемы с моим SQL-запросом:
public DataSet recherche(string code)
{
DataSet ds = null;
using (OleDbConnection cnn = new OleDbConnection(strConn))
{
cnn.Open();
string Oledb = "SELECT * FROM Code WHERE Imei=@IMEI";
using (OleDbDataAdapter adapter = new OleDbDataAdapter(Oledb, cnn))
{
adapter.SelectCommand.Parameters.AddWithValue("@IMEI", code);
ds = new DataSet();
adapter.Fill(ds, "Code");
}
}
return ds;
}
Уровень бизнес-логики:
namespace unlock2_buisness
{
public class code_imei
public DataSet rechercheduCode(string imei)
{
unlockDAL objetDataLayer = new unlockDAL();
if (imei == "")
throw new Exception("merci d'indique l'imei de recherche");
DataSet dt = null;
dt = objetDataLayer.recherche(imei);
return dt;
}
На моем пользовательском уровне текстовое поле, предназначенное для поиска, чтобы отобразить результат в коде текстового поля, не отвечает, и я не получаю соответствующий код, предоставляя IMEI устройства, как это должно быть из таблицы.
private void btnrechercheimei_Click(object sender, EventArgs e)
{
imeiLogic.rechercheduCode(txtimei.Text);
imeiLogic.rechercheduCode(txtcode.Text);
}
Я буду признателен за вашу поддержку.
Комментарии:
1. И не могли бы вы, пожалуйста, отформатировать свой заголовок разумным образом? Это больно. Большое вам спасибо.
Ответ №1:
Проблема в том, как вы используете свой класс BusinesLogic.
public DataSet rechercheduCode(string imei)
принимает строку в качестве входного параметра и возвращает DataSet.
Когда вы вызываете метод, подобный этому:
imeiLogic.rechercheduCode(txtimei.Text);
вы предоставляете входной параметр (значение, которое находится в текстовом поле), но вы не сохраняете возвращенный набор данных в переменной.
В наборе данных будет таблица с именем Code, которая будет содержать строки результатов запроса или 0 строк, если ничего не найдено.
Оставаясь как можно ближе к вашей текущей реализации, я предлагаю следующее:
private void btnrechercheimei_Click(object sender, EventArgs e)
{
// call the BLL to get a dataset
var dataSet = imeiLogic.rechercheduCode(txtimei.Text);
// get our table in the dataset
var codeTable = dataSet.Tables["Code"]; // table
// check if there was a row returned
if (codeTable.Rows.Count > 0)
{
var row = codeTable.Rows[0]; // pick the first one
txtcode.Text = row["code_mck"].ToString(); // update our textbox
}
// Add handling for 0 rows and/or more than 1 rows returned
}