Когда BCP обрабатывает файл без ошибок, и вы получаете 0 строк, это обычно означает, что BCP не нашел разделитель, который ему было сказано искать. Он искал и обыскивал весь файл и не нашел цепочку разделителя, которую вы указали в файле формата (или что он использует по умолчанию).
Как сказал Роджер, файл выглядит как разделитель табуляции, но в вашем файле формата указан первый столбец с разделителем-запятой.
Таким образом, BCP читает байты за байтом и никогда не находит запятую, пока не достигнет конца файла ... так что нет данных для загрузки. BCP успешно запущен, и у вас нет загруженных строк.
Именование каталога представления и именование файла важны, потому что платформа MVC ASP.NET делает определенные предположения о них. Если Вы не соответствуете этим предположениям, то необходимо написать код для уведомления платформы, что Вы делаете. Вообще говоря, необходимо соответствовать этим предположениям, если у Вас нет серьезного основания не к.
Давайте посмотрим на самое простое действие контроллера:
public ActionResult NotAuthorized()
{
return View();
}
Поскольку никакое имя представления не было указано в вызове для Просмотра (), платформа предположит, что имя файла представления совпадет с именем Действия. Платформа имеет тип под названием ViewEngine, который предоставит расширение. ViewEngine по умолчанию является WebFormViewEngine, который возьмет то имя и добавит .aspx к нему. Таким образом, полное имя файла в этом случае было бы NotAuthorized.aspx.
Но в которой папке будет найден файл? Снова, ViewEngine предоставляет ту информацию. С WebFormViewEngine это посмотрит в двух папках: ~/Views/Shared и ~/Views/{контроллер}
Таким образом, если бы Ваш контроллер назвали AccountController, то это посмотрело бы в ~/Views/Account
Но могли бы быть времена, когда Вы не хотите следовать этим правилам. Например, два различных действия могли бы возвратить то же представление (с другой моделью или чем-то). В этом случае, если Вы указываете имя представления явно в Вашем действии:
public ActionResult NotAuthorized()
{
return View("Foo");
}
Обратите внимание, что с WebFormViewEngine, "имя представления" обычно является тем же как именем файла, меньше расширение, но платформа не требует платформы других механизмов представления.
Точно так же у Вас могла бы также быть причина хотеть, чтобы Ваше приложение искало представления и папки не по умолчанию. Можно сделать это путем создания собственного ViewEngine. Я показываю технику в этом сообщении в блоге, но имена типов отличаются, так как это было записано для более ранней версии платформы. Основная идея является все еще тем же, как бы то ни было.
В отношении ожидаемых названий представлений я думаю, что это - одна из тех вещей, которые каждый проект или организация попытаются стандартизировать.
Когда Вы подсказали в Вашем вопросе, возможно, что некоторые из этих Представлений (или более точно, Действия, которые представляют их) становятся популярными через плату, как, например, те ниже этого распространены в приложениях RoR, которые принимают остальных парадигма:
Выбор/стандартизация Представлений в основном зависит от того, как Вы моделируете свое приложение (для высказывания очевидного) и как мелкомодульный Вы хотите пойти. Чем ближе Вы отображаете свои контроллеры на отдельные образцовые классы (кашель... ресурсы... кашляют), тем короче Ваши действия будут иметь тенденцию быть, и более легко Вы сможете следовать за стандартным набором действий (как в вышеупомянутом примере).
Я также полагаю, что более короткая справка действий, продвигая все больше образцовой бизнес-логики в сами модели, где она принадлежит.