2010-11-10 13 views
18

Trong studio trực quan, bạn có một nhà thiết kế đẹp đóng gói một proc được lưu trữ với một phương thức nhỏ gọn. Tôi hoàn toàn yêu LINQPad và sử dụng nó trên cơ sở hàng ngày tại nơi làm việc (không cần phải mở SQL Studio cho công việc của tôi vì tôi đã sử dụng nó!) Và muốn gọi procs được lưu trữ trong khi sử dụng nó.Có thể gọi Thủ tục lưu trữ bằng LINQ trong LINQPad không?

Tôi sợ tôi biết câu trả lời cho câu hỏi của riêng mình nhưng tôi hy vọng rằng có thể có một tính năng tôi bị thiếu hoặc có lẽ ai đó có ma thuật đen mà họ có thể cho tôi mượn để thực hiện điều này. Btw, tôi đang sử dụng LINQPad 4 nếu điều đó tạo nên sự khác biệt.

Chỉnh sửa
Xem câu trả lời của tôi bên dưới.

+1

lưu trữ hỗ trợ thủ tục trong LINQPad đã được cải thiện hơn nữa trong phiên bản 4,28 (www.linqpad.net/beta.aspx): nó bây giờ hỗ trợ các tham số tùy chọn, cho phép bạn truy cập giá trị trả về + giá trị tham số đầu ra, và cho phép bạn gọi sys procs (chẳng hạn như sys.sp_who2) từ bất kỳ cơ sở dữ liệu nào. Chuyển đến trợ giúp | Có gì mới để biết thêm thông tin. –

+0

Cảm ơn những người đứng đầu Joe :) – jlafay

+0

Vui vì tôi có thể giúp đỡ. Bạn có thể muốn nhận phần "trả lời" của câu hỏi của bạn và đăng câu hỏi đó dưới dạng câu trả lời thực tế. Nếu bạn đã làm, tôi sẽ upvote nó, vì nó cho biết thêm thông tin hữu ích. –

Trả lời

20

Ít nhất trong bản sao LINQPad của tôi, các thủ tục được lưu trữ hiển thị trong cơ sở dữ liệu treeview và có thể được gọi trực tiếp.

Dưới đây là một ảnh chụp màn hình:

Screenshot

+0

Tôi sẽ phải thử các tên phương thức đó và xem liệu chúng có thực thi nếu ngôn ngữ được đặt thành C# Statements hay C# Program. Cảm ơn Daniel! – jlafay

-1

Bạn chỉ có thể lưu truy vấn sử dụng C# với các đối tượng chuẩn ADO.NET (SqlConnection, SqlCommand, v.v.) và Dump() kết quả.

Tôi nhận ra rằng nó không sử dụng LINQ, nhưng nó đã phục vụ tốt cho tôi.

+0

Tôi đã làm tương tự như vậy nhưng cố gắng sử dụng LINQ nhiều hơn nếu có thể :) Câu hỏi này là một cái gì đó đã bị kẹt trong tâm trí của tôi trong một thời gian ngắn và có xu hướng nổi lên. Vì vậy, tôi nghĩ hôm nay là tốt như bất cứ điều gì để yêu cầu nó. – jlafay

8

trả lời của tôi (Với sự hỗ trợ của Daniel, cảm ơn.)

Daniel đã giúp tôi nhận ra rằng các thủ tục lưu trữ có thể được gọi nếu bạn nhắm mục tiêu một cơ sở dữ liệu với danh sách thả xuống trong cửa sổ truy vấn; sau đó trong cửa sổ truy vấn gọi proc được lưu trữ theo tên của nó và nối thêm dấu ngoặc đơn vào cuối để gọi nó là một hàm.

Sự khác biệt chính giữa phiên bản hiện tại (tôi đang sử dụng 4.26.2 kể từ ngày này) là LINQ trong VS trả về các kiểu dữ liệu tùy chỉnh để đối sánh các đối tượng dữ liệu được trả về từ thủ tục được lưu trữ và LINQPad trả về một DataSet. Vì vậy, bằng cách chọn "C# Statement (s)" bạn có thể chạy thành công này như một truy vấn:

DataSet fooResults = foo_stored_proc(myParam); 

Cảm ơn sự giúp đỡ của mọi người!

11

Tổng hợp một số trong những câu trả lời khác cũng như thêm một chút thông tin bổ sung:

Kết nối với nguồn dữ liệu của bạn bằng cách sử dụng mặc định (LINQ to SQL) tài xế. Đảm bảo rằng hộp kiểm Bao gồm các thủ tục và chức năng được lưu trữ được chọn.

Các thủ tục và chức năng được lưu trữ hiện khả dụng dưới dạng các hàm .NET (ví dụ: C#) trong các truy vấn sử dụng kết nối. Các tham số theo yêu cầu của hàm phản ánh các tham số được yêu cầu bởi thủ tục lưu sẵn hoặc hàm cơ sở dữ liệu.

Giá trị được trả về bởi hàm là ReturnDataSet là loại LINQPad bắt nguồn từ DataSet. Thật không may là không dễ dàng thực hiện truy vấn LINQ trên tập dữ liệu nhưng LINQPad cung cấp phương thức mở rộng AsDynamic() sẽ lấy bảng đầu tiên của tập dữ liệu trả về (thường chỉ có một bảng) và chuyển đổi các hàng thành IEnumerable<Object> nơi các đối tượng trong bộ sưu tập là động cho phép bạn truy cập các giá trị cột dưới dạng thuộc tính. Ví dụ.nếu thủ tục lưu trữ của bạn trả về cột IdName bạn có thể sử dụng LINQ:

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

Đáng tiếc là bạn sẽ không phải IntelliSense vì các đối tượng hàng năng động.

0

Tôi đang sử dụng phiên bản 4.51.03 và kết nối với phiên bản SQL Server 2012 Express. Sau khi kết nối với cơ sở dữ liệu AdventureWorks2012, tôi có thể xem tất cả các thủ tục được lưu trữ. Nhấp chuột phải vào một thủ tục đã lưu và chọn Trình đơn thả xuống StoredProceedureName (...) thả xuống, bạn hiển thị quy trình được lưu trữ trong cửa sổ truy vấn. Bạn cần phải chèn các tham số bên trong dấu ngoặc đơn tiếp tục dấu ba chấm và chạy truy vấn.

Các ví dụ được trình bày trong hai bài viết sau đây:

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