2010-11-10 2 views
18

В визуальной студии у вас есть красивый дизайнер, который инкапсулирует сохраненный процесс с изящным маленьким методом. Я полностью люблю LINQPad и ежедневно его использую на работе (мне не нужно было открывать SQL Studio для моей работы, так как я ее использовал!) И хотел бы вызвать хранимые procs при ее использовании.Можно ли вызвать хранимую процедуру с помощью LINQ в LINQPad?

Боюсь, я знаю ответ на свой вопрос, но я надеюсь, что, возможно, есть функция, которую я пропускаю, или, возможно, у кого-то есть черная магия, которую они могут одолжить мне, чтобы это произошло. Кстати, я использую LINQPad 4, если это имеет значение.

Редактировать
См. Мой ответ ниже.

+1

Поддержка хранимых процедур в LINQPad улучшилась далее в версии 4.28 (www.linqpad.net/beta.aspx): его теперь поддерживает дополнительные параметры, позволяет получить доступ к значениям возвращаемого значения + выходных параметров и позволяет вызывать sys procs (например, sys.sp_who2) из ​​любой базы данных. Перейти к справки | Что нового для получения дополнительной информации. –

+0

Спасибо за головокружение Джо :) – jlafay

+0

Рад, что я мог помочь. Вы можете захотеть взять свой «ответ» в своем вопросе и опубликовать его как фактический ответ. Если бы вы это сделали, я бы выделил его, так как он добавляет полезную информацию. –

ответ

20

По крайней мере, в моей копии LINQPad хранимые процедуры отображаются в дереве данных базы данных и могут быть вызваны напрямую.

Вот скриншот:

Screenshot

+0

Мне нужно попробовать эти имена методов и посмотреть, будут ли они выполняться, если язык установлен на C# Statement или C# Program. Спасибо, Дэниэл! – jlafay

-1

Вы можете просто сохранить запрос, который использует C# со стандартными объектами ADO.NET (SqlConnection, SqlCommand и т. Д.) И Dump() результатов.

Я понимаю, что он не использует LINQ, но он хорошо меня обслужил.

+0

Я сделал то же самое, но старался использовать больше LINQ, если возможно :) Этот вопрос - это что-то который застрял в моей голове на некоторое время и имеет тенденцию к поверхности. Поэтому я подумал, что сегодня так хорошо, как любой, чтобы спросить об этом. – jlafay

8

Ответ (С помощью Дэниела, спасибо.)

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

Основное отличие текущей версии (я использую 4.26.2 на эту дату) заключается в том, что LINQ в VS возвращает пользовательские типы данных для соответствия объектам данных, возвращаемым из хранимой процедуры, и LINQPad возвращает DataSet. Поэтому, выбрав «Заявление (ы) C#», вы можете успешно запустить это как запрос:

DataSet fooResults = foo_stored_proc(myParam); 

Спасибо за помощь!

11

Подытоживая некоторые другие ответы, а также добавить немного дополнительной информации:

Подключение к источнику данных с помощью по умолчанию (LINQ к SQL) драйвер. Убедитесь, что установлен флажок Включить хранимые процедуры и функции.

Сохраненные процедуры и функции теперь доступны как функции .NET (например, C#) в запросах с использованием соединения. Параметры, требуемые функцией, отражают параметры, требуемые хранимой процедурой или функцией базы данных.

Значение, возвращаемое функцией, является ReturnDataSet, которое является типом LINQPad, происходящим от DataSet. К сожалению, выполнять запросы LINQ на наборах данных не так просто, но LINQPad предоставляет метод расширения AsDynamic(), который будет принимать первую таблицу возвращаемого набора данных (обычно есть только одна таблица) и преобразовывать строки в IEnumerable<Object>, где объекты в коллекции являются динамическими, позволяя вам получить доступ к значениям столбцов в качестве свойств. Например.если хранимая процедура возвращает столбцы Id и Name вы можете использовать LINQ:

SomeStoredProc().AsDynamic().Where(row => row.Id == 123 && row.Name == "Foo") 

К сожалению, у вас не будет IntelliSense, так как объекты строки являются динамическими.

0

Я использую версию 4.51.03 и подключаюсь к выпуску SQL Server 2012 Express. После подключения к базе данных AdventureWorks2012 я могу просмотреть все хранимые процедуры. Щелкните правой кнопкой мыши сохраненную процедуру и выберите Выпадающий список StoredProceedureName (...), вы отобразите хранимую процедуру в окне запроса. Вам нужно вставить параметры в круглую скобку, охватывающую многоточие, и выполнить запрос.

Примеры показаны в следующих двух сообщений:

http://hodentekmsss.blogspot.com/2015/01/learn-querying-sql-server-2012-using.html

http://hodentekmsss.blogspot.com/2015/01/learn-querying-sql-server-2012-using_25.html

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