2015-06-02 2 views
0

Я хотел бы назвать несколько хранимых процедур на основе набора пользовательских данных выбора и возврата, которые будут загружены пользователем. Каждая хранимая процедура имеет другой набор параметров и тип. Эти параметры будут отображаться через веб-страницу в виде элементов формы. Мой вопрос в основном состоит в том, чтобы иметь другие идеи общего механизма для вызова хранимых процедур из C# независимо от типа параметров.Общие вызовы для хранимой процедуры для загрузки данных с C#

В настоящее время я собираюсь настроить файл xml, который будет определять способ вызова хранимых процедур и на основе списка типов параметров динамически разобрать вход и вызвать данную хранимую процедуру.

Я был бы очень рад иметь любые другие идеи, используя любой другой механизм, доступный в рамках .Net. Я не уверен, есть ли лучшие способы.

Большое спасибо заранее б

+0

Мне нравится идея. Убедитесь, что при добавлении параметров в команду вы включаете тип типа DbType.Date. Вам понадобится оператор switch, чтобы преобразовать сохраненный тип XML в тип данных. – jdweng

+0

спасибо за комментарий –

ответ

1

Есть другие способы сделать это, но я не уверен, что они лучше.

Один из способов - использовать метод 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 и т. Д.).

+0

Это открывалка для глаз. Это то решение, которое я искал. Мне по-прежнему нужен способ заполнения элементов формы на основе параметров, необходимых каждой хранимой процедуре, но я думаю, что наличие файла xml-файла в этой информации закроет пробел. большое спасибо –

+0

Во-первых, я рад, что смогу помочь. Во-вторых, зачем вам нужен xml-файл для хранения информации о том, какой элемент подходит для какого типа управления? Существует не так много типов параметров, и это не так много элементов управления. Я бы создал жестко закодированный метод, чтобы решить тип управления входными данными на основе типа данных параметра, если бы я был в вашей ситуации. –

+0

Правильно, но только для того, чтобы написать новую хранимую процедуру и добавить определение в какой-то файл конфигурации, является частью требования к задаче. Кодекс не следует создавать, когда необходимо добавить новый отчет. Надеюсь, это имеет смысл. Cheers –

Смежные вопросы