вставить в базу данных, автоматически создавая папку

#asp.net #vb.net #sql-server-2008

#asp.net #vb.net #sql-server-2008

Вопрос:

Мне просто интересно, возможно ли это. У меня есть сайт, который администраторы используют для добавления продуктов в нашу базу данных. База данных находится на SQL Server 2008, и я использую Visual Studio 2010, используя VB.net и надеялся, что при добавлении нового продукта он автоматически сгенерирует папку, присвоенную идентификатору этого продукта.

Я не нашел в Интернете ничего, что указывало бы на то, что это возможно, но для меня это было бы намного проще. На данный момент мне нужно не забыть создать папку на диске X: для каждого добавленного продукта. Сейчас у нас до 645 продуктов, так что вы можете видеть мою потребность в какой-то автоматизации здесь.

Любая помощь была бы высоко оценена!

Комментарии:

1. Нужно ли запускать это исключительно из контекста этой базы данных или вы можете запустить службу, которая проверяет наличие новых продуктов и создает папки из этого?

2. Я действительно не знаю. Если это можно сделать из веб-службы, это нормально, я просто никогда не слышал о чем-то подобном. Я надеялся, что кто-нибудь скажет мне, что они делали это раньше, и покажет мне, как. Я понятия не имею, с чего начать.

3. Вы могли бы заставить сайт создавать каталог во время добавления продуктов в базу данных. Это позволило бы базе данных не «пачкать руки», создавая каталоги.

4. Я могу просто добавить некоторый код на свою страницу vb, нажав кнопку отправки, которая добавляет новый продукт? Я буду продолжать что-то искать, но мне не везет, если вы знаете, как я мог бы это сделать, я был бы признателен за пример кода.

Ответ №1:

Если вы используете веб-сервис или веб-проект для создания продуктов, вы могли бы создать каталог там, когда пользователь вводит новый продукт.

 Dim dir As New System.IO.DirectoryInfo("C:" amp; someFolder)
If Not dir.Exists Then 
dir.Create()
End If
  

Комментарии:

1. Вы знаете, как я мог бы сделать ‘someFolder’ идентификатором текущего элемента? Я хотел использовать IDENT_CURRENT, но поскольку это не оператор sql, я не знаю, поместил бы я это в инструкцию, которую вы написали.

2. Хм, неважно. Я думаю, что использование сеанса («ProductID») будет работать.

3. Я использовал этот код с Session («ProductID») и получил сообщение об ошибке Could not find a part of the path 'X:645'. Есть предложения?

4. Может быть проблема с разрешениями. Если вы запускаете сайт как СЕТЕВУЮ СЛУЖБУ или какую-либо учетную запись, у которой нет доступа к созданию каталогов на X: , это может быть проблемой.

5. Ну, я могу создавать папки в Visual Studio просто отлично. Затем, когда я захожу на диск X и создаю там папки, это тоже работает. Должен ли я просто придерживаться ручного способа сделать это? Я действительно хотел бы, чтобы это сработало. Но когда другие пользователи добавят продукты, они не смогут добавлять папки, потому что у них не будет доступа, да?

Ответ №2:

Если продукты всегда добавляются в вызов хранимой процедуры, вы могли бы добавить код для вызова xp_cmdshell в «MD < имя_папки >» после вставки. Если это не сделано с помощью хранимых процедур, вы могли бы сделать что-то подобное в триггере вставки. Однако, обе эти действительно плохие идеи. SQL — это прежде всего компонент database engine, а не менеджер файловой системы или гибкий инструмент программирования. Гораздо лучше, если приложения, которые вызывают создание продуктов, будут отвечать за управление файлами и папками на ваших жестких дисках.

Комментарии:

1. … действительно плохие идеи, которые я видел, как люди предлагали делать раньше. Идея не новая, просто она постоянно всплывает.