Как решить значение не может быть нулевым
это мой код и он работает нормально у меня есть 10 контактов и когда я нажимаю кнопку lbl19
увеличьте, чтобы показать следующий идентификатор, но когда lbl19 находится на 11 выше идентификатора контактов, форма останавливается и получает значение ошибки не может быть нулевым, я пытаюсь решить его, как когда проект получает нулевое значение, он показывает сообщение, что это Макс контактов ur, но не работает, можете ли вы мне помочь? и я получаю ошибку на ImageByte.value ik это неправильно, но это то, что я получаю
Что я уже пробовал:
if (ImageByte.Value = null) { MessageBox.Show("This is max of ur contacts"); } else { string sql = "select Attachments.FileData from Contacts where ID =" + lbl19.Text;//Attachments.FileData OleDbCommand vcom = new OleDbCommand(sql, cn); ImageByte = (byte[])vcom.ExecuteScalar(); //contains 20 extra bytes MemoryStream MemStream = new MemoryStream(ImageByte.Skip(20).ToArray()); //Read bytes starting at position 20 Image image = Image.FromStream(MemStream); //Will work now pictureBox1.Image = image; }
Richard Deeming
string sql = "select Attachments.FileData from Contacts where ID =" + lbl19.Text;
Не делай этого так!
Пока ты здесь возможно безопасно в этом случае, поскольку пользователь (предположительно) не может изменить значение вашей метки, использование конкатенации строк для построения SQL-запросов может и приведет к SQL-инъекция[^] факторы уязвимости.
НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
const string sql = "select Attachments.FileData from Contacts where ID = ?"; using (OleDbCommand vcom = new OleDbCommand(sql, cn)) { vcom.Parameters.AddWithValue("ID", lbl19.Text); ImageByte = (byte[])vcom.ExecuteScalar(); }
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
Richard Deeming
Кроме того, сделайте себе одолжение и дайте своим элементам управления значимые имена, а не принимайте имена Visual Studio по умолчанию.
Конечно, вы можете вспомнить, что lbl42
представляет сегодня но через шесть недель, когда вы вернетесь, чтобы отредактировать свой код, вы забудете. Тогда как если это называется что-то вроде lblTheAnswer
- по крайней мере , у тебя будет ключ к разгадке. :)