Есть другие способы сделать это, но я не уверен, что они лучше.
Один из способов - использовать метод SqlCommandBuilder.DeriveParameters
для заполнения вашего SqlCommand.Parameters
динамически.
Главное преимущество использования этого метода заключается в том, что вам не нужно сохранять список параметров в другом месте, кроме самой хранимой процедуры, что значительно упрощает ваше обслуживание. Кроме того, он делает ваш код короче и чище.
Недостатком является то, что для каждой хранимой процедуры требуется вызов базы данных, который может быть немного медленнее, чем синтаксический разбор XML-файла.
Обратите внимание на раздел замечания по DeriveParameters MSDN страницы я связан с:
DeriveParameters перезаписывает любую существующую информацию о параметрах для SqlDbCommand.
DeriveParameters требует дополнительного вызова в базу данных для получения информации. Если информация о параметрах известна заранее, более эффективно заполнять подборку параметров, задавая информацию явно.
Вы можете использовать DeriveParameters только с хранимыми процедурами. Вы не можете использовать DeriveParameters с расширенными хранимыми процедурами. Вы не можете использовать DeriveParameters для заполнения SqlParameterCollection произвольными операциями Transact-SQL, такими как параметризованная инструкция SELECT.
Путь использовать его очень просто:
SqlCommand cmd;
Using(SqlConnection Con = new SqlConnection("ConnectionString")
{
cmd = new SqlCommand("StoredProcedureName", Con);
cmd.CommandType = CommandType.StoredProcedure;
Con.Open();
SqlCommandBuilder.DeriveParameters(cmd);
Con.Close();
}
После того, как вы выполнены этот код, cmd.Parameters будет содержать все параметры готовых к использованию, все, что вам нужно будет сделать, это установите для них значение.
Я бы рекомендовал создать метод, который будет инкапсулировать этот код и получить SqlCommend в качестве параметра. Кроме того, вы, вероятно, захотите создать метод, который вернет управление вводом, наиболее подходящее для каждого параметра (например, DatePicker
для SqlDBType.Date
, TextBox
для SqlDBType.Varchar
и т. Д.).
Мне нравится идея. Убедитесь, что при добавлении параметров в команду вы включаете тип типа DbType.Date. Вам понадобится оператор switch, чтобы преобразовать сохраненный тип XML в тип данных. – jdweng
спасибо за комментарий –