Всем привет. Мне нужно реализовать загрузку файлов на сервер и сохранения пути до них в бд. Проблема в том, что у меня много таблиц (около 30) в которые может быть сохранён путь, и если использовать единственную хранимую процедуру, то получится большое количество if-ов. Поэтому я решил написать много хранимок и вызывать конкретно нужную, благодаря этому мне удалось использовать место ≈90 проверок всего лишь ≈30 (при загрузки 3 файлов в худшем случаи, когда последний if) Темнеменее мне кажется, что это какой-то велосипед и скорее всего есть какие-то лучшие способы это сделать, к тому же мне не нравится повторяющийся код во втором методе. Как можно лучше решить ряд этих проблем?
[HttpPost]
public JsonResult UploadAjax(string nameJournal)
{
int count = -1;
string[] files = new string[Request.Files.Count];
string relativePath = "~/Files/nameJournal/" + id;
var absolutePath = Server.MapPath(relativePath);
string resultError = "Файлы не загружены:";
if (!Directory.Exists(absolutePath))
{
DirectoryInfo dir = Directory.CreateDirectory(absolutePath);
}
foreach (string fileNameFromView in Request.Files)
{
count += 1;
HttpPostedFileBase file = Request.Files[fileNameFromView];
string fileName = Path.GetFileNameWithoutExtension(file.FileName) + "_"
+ DateTime.Now.ToShortDateString()
+ Path.GetExtension(file.FileName);
try
{
file.SaveAs(absolutePath + "/" + fileName);
files[count] = file.FileName;
}
catch (Exception)
{
resultError += string.Format("\n{0}", file.FileName);
}
}
return Json(UploadDataBase(files, resultError, relativePath, string nameJournal));
}
И второй метод
public string UploadDataBase(string[] files, string resultError, string relativePath, nameJournal)
{
string resultSuccess = "Файлы загружены:";
if (nameJournal == "ТАКОМУ-ТО")
{
for (int i = 0; i < files.Length; i++)
{
if (files[i] != null)
{
try
{
//Хранимка1
resultSuccess += string.Format("\n{0}", files[i]);
}
catch (Exception)
{
System.IO.File.Delete(Server.MapPath(relativePath + "/" + files[i]));
resultError += string.Format("\n{0}", files[i]);
}
}
}
}
else if (nameJournal == "ТАКОМУ-ТО2")
{
for (int i = 0; i < files.Length; i++)
{
if (files[i] != null)
{
try
{
//Хранимка2
resultSuccess += string.Format("\n{0}", files[i]);
}
catch (Exception)
{
System.IO.File.Delete(Server.MapPath(relativePath + "/" + files[i]));
resultError += string.Format("\n{0}", files[i]);
}
}
}
}
return resultSuccess + "\n\n" + resultError;
}
Если код в IF всегда одинаковый, почему бы не заменить IFы на Dictionary?
Dictionary<string, string> dictionary = new Dictionary<string, string>()
{
{"JournalID1","StoredProcID1"},
{"JournalID2","StoredProcID2"},
}
public string UploadDataBase(string[] files, string resultError, string relativePath, string nameJournal)
{
string resultSuccess = "Файлы загружены:";
if (dictionary.ContainsKey(nameJournal))
{
var proc = dictionary[nameJournal];
for (int i = 0; i < files.Length; i++)
{
if (files[i] != null)
{
try
{
//Хранимка1
// use proc here
resultSuccess += string.Format("\n{0}", files[i]);
}
catch (Exception)
{
System.IO.File.Delete(Server.MapPath(relativePath + "/" + files[i]));
resultError += string.Format("\n{0}", files[i]);
}
}
}
}
else
{
// Эррор, журнал не найден
}
return resultSuccess + "\n\n" + resultError;
}
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Мне необходимо авторизоваться на сайте, и дальше работать с POST запросами, но есть проблема на сайте выдается csrfmiddlewaretokenПоэтому надо сначала...
Как проверить нажатие клавиши Shift в обработчике события прокрутки колёсика? У меня он вот такой:
Пытаюсь сериализовать xml-справочники и перегнать в нормальный вид, но в итоге получаю не правильно совмещенные данныеПодскажите, где искать...