2017-02-08 2 views
2

Используя метод SqlDataAdapter (или другой метод ASP.NET), можно ли сделать один вызов SQL как для хранимой процедуры, так и для запуска оператора select? Оба имеют параметры.SqlDataAdapter - объединить хранимую процедуру и оператор Select с параметрами

Я знаю, вы можете объединить несколько операторов выбора ...

DataSet ds = new DataSet(); 

using (SqlConnection connection = new SqlConnection(myConnectionString)) 
{ 
    connection.Open(); 

    SqlDataAdapter cmd = new SqlDataAdapter("SELECT id FROM Table1 WHERE [email protected]; SELECT id FROM Table2", connection); 
    cmd.SelectCommand.Parameters.AddWithValue("@id",myid); 
    cmd.Fill(ds); 
} 

И вы можете вызвать хранимую процедуру подобным образом ...

DataSet ds = new DataSet(); 

using (SqlConnection connection = new SqlConnection(myConnectionString)) 
{ 
    connection.Open(); 
    SqlDataAdapter cmd = new SqlDataAdapter("myStoredProcedure", connection); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.SelectCommand.Parameters.AddWithValue("@id",myid); 
    cmd.Fill(ds); 
} 

Но я хотел бы объединить два в один звонок.

Мне нужно сохранить хранимую процедуру и выбрать утверждения отдельно. Я не хочу объединять их в одну хранимую процедуру.

Благодарим за помощь!

ответ

2

Трюк exec.

Из документов

Это выполняет команду строку или строку символов в Transact-SQL партии, или один из следующих модулей: системы хранимой процедуры, определяемые пользователем хранимые процедуры, CLR хранимой процедуры , скалярнозначная пользовательская функция или расширенная хранимая процедура.

Таким образом, вы можете сделать это:

DataSet ds = new DataSet(); 
using (SqlConnection connection = new SqlConnection(myConnectionString)) 
{ 
    connection.Open(); 
    SqlDataAdapter cmd = new SqlDataAdapter("SELECT id FROM Table1 WHERE [email protected]; Exec myStoredProcedure @myid", connection); 
    cmd.SelectCommand.Parameters.AddWithValue("@myid",myid); 
    cmd.Fill(ds); 
} 
+0

Благодаря Хуан! Поэтому, если бы я хотел передать два параметра в мою процедуру магазина, это будет выглядеть так: «Exec myStoredProcedure @myid, @ myid2» Кроме того, что, если одним из этих параметров был пользовательский тип таблицы? –

+1

Да, вы должны передать весь параметр, требуемый командой multi-statement. –