Как получить значение в datagridview с помощью автозаполнения текста
Я создаю одно приложение, где medicine_name-это текст автозаполнения, основываясь на этом выборе, я хочу заполнить Expiry_Date, но всякий раз, когда я запускаю код его данный мне индекс был за пределами исключения массива извлечь код, который я написал на событие dataGridView1_CellEndEdit,im через МС доступ к БД я не знаю, где здесь я не прав им вставить мой код
структура таблицы такова :
Med_id Счетчик
Памятка Medicine_Name
Памятка Number_of_tab
Drawer_No Памятка
Dealer_Name Текст
В Наличии Количество
Expiry_Date Дата/Время (формат: shortDatetime)
структура datagridview
Количество Medicine_Name (его текстовая база автозаполнения на этом я хочу показать Expiry_Date), Medicine_Cost, Manufacturer_Name,Batch_No,срок годности , Рупии
Что я уже пробовал:
private void dataGridView1_CellEndEdit_1(object sender, DataGridViewCellEventArgs e) { string connectionString = null; connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString; con.ConnectionString = connectionString; string medicinename = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["Medicine_name"].Value); DateTime Expiry_Date = Convert.ToDateTime (dataGridView1.Rows[e.RowIndex].Cells["Expiry_Date"].Value); con.Open(); cmd = new OleDbCommand("select Expiry_Date from Medicine_Available_Detail where Medicine_Name='" + medicinename + "'", con); OleDbDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { Expiry_Date = Convert.ToDateTime (dr.GetValue(5));// exeception coming on this line } con.Close(); }
[no name]
Простой. Вы получаете данные для одного столбца и пытаетесь получить доступ к данным в вашем считывателе данных, которые не существуют (у вас есть только 1 столбец информации, а не 5).
Atul Rokade
я внес изменения в эту строку Expiry_Date = Convert.ToDateTime(dr ["Expiry_Date"]); но все равно значение не извлекается в базе данных : (, пожалуйста, скажите мне, на какое событие я должен поместить код, чтобы я мог получить значение
[no name]
Событие, которое вы используете, должно работать. Вы пробовали проникнуть в свой код и выяснить, каковы значения переменных? Начни с этого.
Atul Rokade
я перепробовал все, но потерпел неудачу
[no name]
Поскольку никто из нас не знает, что это значит,что вы ожидаете от нас услышать? Мы не можем запустить или отладить ваш код для вас. Вам предстоит научиться запускать свой код в отладчике и находить ошибку.
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
Atul Rokade
@Richard sir: можете ли вы дать мне решение по этому вопросу?
Richard Deeming
Просто - не используйте конкатенацию строк. Вместо этого используйте параметр:
cmd = new OleDbCommand("select Expiry_Date from Medicine_Available_Detail where Medicine_Name = @Medicine_Name", con); cmd.Parameters.AddWithValue("@Medicine_Name", medicinename);
Atul Rokade
Сэр, я написал код на datagridview cellEndEdit, но все еще не получаю вывода, мой запрос medicine_name-это автозаполнение текста в базе datagridview на этом Expiry_Date должен быть заполнен вот мой модифицированный код
строка connectionString = null;
connectionString = ConfigurationManager.ConnectionStrings ["AccessConnectionString"].Параметр connectionString;
против.Параметр connectionString = параметр connectionString;
строка medicinename = Convert.Метод toString(dataGridView1.Ряды[электронный.Параметр rowindex].Cells ["Medicine_name"]. Value);
DateTime Expiry_Date = Конвертировать.Объект todatetime(dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["Expiry_Date"]. Value);
против.Открыть();
команду cmd = новый объект oledbcommand("Выберите это значение, как это значение из Medicine_Available_Detail где Medicine_Name=@Medicine_Name",кон);
УМК.Параметры.AddWithValue ("@Medicine_Name", medicinename);
OleDbDataReader dr = cmd.Метода executereader();
в то время как (dr. Read())
{
Expiry_Date = Конвертировать.Объект todatetime(д-р["это значение"]);
}
против.Закрывать();
Richard Deeming
Если вы не получаете никаких результатов, это означает, что в вашей базе данных нет соответствующих записей.
Atul Rokade
Сэр данные есть, я проверил, когда я выбираю Medicine_Name : Xedo который это значение 10/04/2018(ДД/ММ/гггг)