Изменение изображения на основе значения int БД, связанного с определенным идентификатором
Всем привет,
я пытаюсь вывести наш локальный пользовательский интерфейс (приложение WPF) в интернет. (Только для местных целей, нет доступа с www, так что вопросы безопасности не являются большой проблемой банкомата).
Я использовал asp.net с помощью c# для этого все работало нормально (в основном gridviews и layout), пока мне не пришлось делать обзорную графику (технический обзор туннеля).
Как изменить imageurl в соответствии со значением int определенной таблицы в базе данных? И мне нужно сделать это, связанное с ID.
Imagecontrol --> дает жестко закодированный ObjectID для --> Codebehind (C#) --> генерирует Imageurl для этого идентификатора на основе значения int "строка базы данных" --> возвращает imageurl в imagecontrol.
Я не хочу использовать UniqueID или что-то в этом роде
Никакого вмешательства пользователя, кроме масштабирования, это просто обзорная графика, которая обновляется каждые x секунд (я не знаю, как это сделать, например, когда изменяется запись в базе данных).
Я много гуглил, но всегда речь идет о том, как привязать графику к gridview или как показать изображение из базы данных.
Помощь была бы очень признательна, так как я не настоящий программист, но я показал кое-что из того, что я сделал, своему боссу, и ему это понравилось, и он хотел, чтобы я сделал это с технической обзорной картой, а теперь я действительно застрял и не могу ухватиться за нее.
Чтобы сделать его более ясным, есть около 50+ маленьких изображений на фоновом изображении. Фон статичен, остальные 50+ изображений время от времени меняются и могут иметь до 15 различных состояний.
Значения для этих 50 изображений хранятся в базе данных MSSQL 2012, и существуют ocs-процессы, которые обновляют таблицы базы данных.
Таблица базы данных выглядит так:
Systime
Удостоверение личности (свойства primarykey)
Соллист
Стеллкод
Funktionsbyte
Я хочу получить данные из базы данных в коде позади вот так:
using (SqlCommand command = new SqlCommand("SELECT Id, SollIst ,Funktionsbyte, Stellcode FROM Stellzustand WHERE Id = '" + ID_property_of_image + "' and SollIst = 1 ", connection))
После этого я хочу установить url-адрес в соответствии со значениями базы данных:
if funktionsbyte == 1 return ~/images/Stellcode+Funktionsbyte.png else return ~/images/ID+Black.png
С уважением,
Деннис
Что я уже пробовал:
Прочтите около 50 различных статей, чтобы понять это, может быть, я слишком туп, чтобы увидеть связь между моей проблемой и прочитанными предложениями.
Пытался сделать это с ЭВАЛОМ, но изображение ничего не показывает, должно быть, я пропустил СТХ. и это не очень элегантное решение, как мне кажется.
<pre> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TrafficCenterConnectionString1 %>" SelectCommand="SELECT Stellzustand.id, Stellzustand.Stellcode, Stellzustand.Funktionsbyte, FROM Stellzustand WHERE SollIst = 1 AND ID = 137496" /> <asp:image id="Image1" runat="server" imageurl='<%# String.Format("~/images/Funktionsbyte={0} & Stellcode={1}", Eval("Funktionsbyte"), Eval("Stellcode" +".png")) %>' />
Mike V Baker
Если я правильно вас понял, вы берете идентификатор из элемента управления, imagecontrol. Я не уверен, что понимаю логику здесь. Идентификатор элемента управления не имеет ничего общего со значениями в базе данных. Идентификатор элемента управления существует только для того, чтобы C# codebehind мог однозначно идентифицировать каждый элемент управления в форме. Такие вещи, как comboBox1, comboBox2, imageControl1 и т. д. (Кстати, я всегда предлагаю называть их тем, что они содержат, cbUserNames).
Что я всегда делал в этом случае, так это сохранял фактический URL-адрес, который вы хотите отобразить в базе данных. Не обязательно объект BLOB, фактические данные изображения, но URL-адрес. Хранение BLOB-объектов в БД делает их более транспортабельными, вы можете переместить БД на другую платформу и не беспокоиться о необходимости также перемещать изображения. Тем не менее я обычно храню URL-адрес.
Я никогда не делал никаких изображений, как вы описываете здесь,древовидную структуру с координатами X, Y. Не в веб-форме. Абсолютное позиционирование относительно других объектов в разных браузерах... вы когда-нибудь видели старый фильм под названием "денежная яма" ??
alexvw
Привет,
Судя по тому, что я вижу в комментарии Майка, описание вашего "сценария" может потребовать некоторого переписывания.
Пожалуйста, поправьте меня, если я ошибаюсь. Я полагаю, что вы не пытаетесь использовать уникальный ClientId каждого элемента управления изображением, чтобы связать его с целевым изображением, а скорее значение int Id, которое каким-то образом вы связали (или должны связать) с каждым элементом управления изображением.
Я бы предположил, что указанное значение int Id будет соответствовать имени его целевого файла изображения (intIdVal.svg/png), что, в свою очередь, облегчит создание необходимого URL-адреса для восстановления/поиска загружаемого файла. В этом случае изменение URL-адресов на основе "значения int определенной таблицы в базе данных" было бы просто вопросом повторного связывания этих значений int с каждым элементом управления изображением, а затем загрузки страницы (с новым набором изображений).
В сценарии рабочего стола я использовал свойство тега элемента управления для хранения данных такого рода, например ключа int Id. Но на веб-странице такого нет; возможно, вам придется придумать способ сделать это таким списком, массивом или другим подходящим контейнером, который, скорее всего, будет прикреплен к сеансу пользователя.
Надеюсь, это поможет; ура!
Kanomar
Прежде всего, спасибо за ваши ответы.
И Алекс, ты прав, я, может быть, увлекся и немного потерял фокус.
И как вы догадываетесь, я не хочу использовать уникальный идентификатор элемента управления изображением, мне просто нужно свойство, в котором я могу ввести 6-значный код, доступный из кода позади.
Я постараюсь улучшить свой вопрос.
С Уважением, Деннис
Richard Deeming
using (SqlCommand command = new SqlCommand("SELECT Id, SollIst ,Funktionsbyte, Stellcode FROM Stellzustand WHERE Id = '" + ID_property_of_image + "' and SollIst = 1 ", connection))
НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
using (SqlCommand command = new SqlCommand("SELECT Id, SollIst ,Funktionsbyte, Stellcode FROM Stellzustand WHERE Id = @Id and SollIst = 1", connection)) { command.Parameters.AddWithValue("@Id", ID_property_of_image); ...