Как получить доступ к файлу в Visual Studio 2015?

Суть вопроса: есть папка img, в нее с помощью FileUpload загружается картинка(картинка в папке появляется, но не в обозревателе), далее в обработчике кнопки "Добавить" картинка должна переводиться в бинарный тип и помещаться в БД (тип поля varbinary(max)). НО вылетает ошибка, что нет доступа к файлу, как этот доступ получить?
Проект, который создан в VS 2008 года, работает отлично, а в VS 2015 выкидывает ошибку.

// Создать подключение к базе
string connectionString =
WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection connection = new SqlConnection(connectionString);

// Загрузить данные таблицы в DataReader
SqlCommand command = new SqlCommand(
"INSERT INTO Photo_DJ ( Photo, Id_photo_dj_dj, Type_photo) VALUES (@Photo, @Type_Ph, @DJ)",
connection);
Stream fs = null;
try
{
connection.Open();

// Указать параметр
command.Parameters.AddWithValue("@DJ", GVDJ.SelectedValue);


//добавляем рисунок
Byte[] bytes = null;
string contenttype = String.Empty;

fs = (Stream)Session["InputStream_FileUpload"];


BinaryReader br = new BinaryReader(fs);

bytes = br.ReadBytes((Int32)fs.Length);
contenttype = (string)Session["contenttype"];
command.Parameters.Add("@photo", SqlDbType.VarBinary).Value = bytes;
command.Parameters.Add("@typephoto", SqlDbType.NVarChar).Value = contenttype;

// cmd = new SqlCommand("insert into empimage(Name) values('" + "~/Image/" + FileUpload1.FileName + "')", con); con.Open(); cmd.ExecuteNonQuery(); con.Close();

int res = command.ExecuteNonQuery();

fs.Close();
lbl_answerquery.Text = "INSERT ok, count rows affected = " + res;
}
catch (Exception ex)
{
lbl_answerquery.Text = "INSERT error = " + ex.ToString();
}
finally
{
if (fs != null)
fs.Close();
connection.Close();
}
  • Вопрос задан
  • 378 просмотров
Пригласить эксперта
Ответы на вопрос 1
Хранить картинки в базе данных - плохой подход.
Для данных используйте базу данных, а для файлов- файловую систему. Попробуйте хранить в базе имя файла и когда он вам нужен брать его с диска. Это даст существенное преимуществф: уменьшение время запроса к БД и объем передаваемой оттуда информации , считывание с файловой системы может быть более оптимизировано по скорости.

Также не стоит хранить объёмные данные в сессии - они будут занимать место в оперативке на сервере на все время жизни сессии.

Попробуйте Entity Framework - вам не нужно будет вручную писать sql запросы , только работать с классами - всю работу с базой он берет на себя

Если файл не виден в обозревателе в Visual Studio, то в контекстном меню папки в обозревателе выберите Add->Existing item (или Alt+Shift+A).

посмотрите metanit.com и professorweb.ru - там очень много материалов по которым можно разобраться с современными .net технологиями.
также есть много ресурсов на asp.net
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы