Ни один из них не отвечает, указывают на важное различие об этих двух операциях. Таблица отбрасывания является операцией, которая может откатываться. <забастовка> Однако усекает, не может откатываться забастовка> ['TRUNCATE TABLE' может откатываться также]. Таким образом отбрасывание очень большой таблицы может быть очень дорогим, если существует много строк, потому что они все должны быть зарегистрированы во временном пространстве в случае, если Вы решаете откатывать его.
Обычно, если я хочу избавиться от большой таблицы, я усеку ее, затем отброшу ее. Таким образом, данные будут отклонены без записи, и таблица может быть отброшена, и то отбрасывание будет очень недорого, потому что никакие данные не должны быть зарегистрированы.
важно указать, хотя это усекает, просто удаляет данные, вставая из-за стола, в то время как отбрасывание, на самом деле, удалит данные и саму таблицу. (принимающий внешние ключи не устраняют такое действие)
ArgumentOutOfRangeException - То, что вы описываете, соответствует исключению вне диапазона:
Исключение, которое выдается, когда значение аргумента находится за пределами допустимый диапазон значений, как определено вызываемым методом.
ArgumentException используется для проверки символов в строке пути, а не типа файла.
Параметр пути имеет нулевую длину строка, содержащая только пробел, или содержит один или несколько недопустимых
ИМХО, диаграмма провала проверки пути выглядит так:
Если это недостаточно для вас, создайте собственный класс исключения:
public class InvalidFileTypeException : System.IO.IOException
{
public InvalidFileTypeException(string path, string acceptedTypeMask)
{
this.Message = string.Format(
"File type '{0}' does not fall within the expected range: '{1}'",
path,
acceptedTypeMask);
}
}
...
throw new InvalidFileTypeException("foo.txt", "*.csv");
Я бы, вероятно, использовал ArgumentException , так как это «исключение, которое выдается, когда один из аргументов, предоставленных методу, недействителен»
Проверьте документацию по существующему методу ввода-вывода в Framework. Он описывает исключения, генерируемые методом. Например, проверьте StreamWriter.StreamWriter (String, Boolean, Encoding, Int32) Constructor на http://msdn.microsoft.com/en-us/library/0wf7ab94 (VS.85). aspx . Исключение, которое я предлагаю вам использовать, чтобы оставаться последовательным, - это IOException . Затем вы можете добавить собственное сообщение с описанием деталей.
IOException - путь включает неправильный или недопустимый синтаксис для имени файла, имени каталога или синтаксиса метки тома.
В вашем случае расширение файла неверно, поэтому сообщить пользователю, как в Throw New IOException («Недопустимое расширение файла.»)
.
Я бы оставил ArgumentException , как описано в документации,
System.ArgumentException
кажется подходящим, либо напрямую, либо как базовый класс для вашего исключения.
Как насчет создания собственного InvalidFilenameException
? Например:
public class InvalidFilenameException : Exception
{
public string Filename { get; private set; }
public InvalidFilenameException(string message, string invalidFilename)
:base(message)
{
Filename = invalidFilename;
}
}