2008-09-17 42 views
5

Tôi không thể tìm thấy một cách thanh lịch để lấy giá trị trả về từ một thủ tục được lưu trữ khi sử dụng TableAdapters.Cách lấy các giá trị trả về thủ tục lưu trữ từ một TableAdapter

Dường như TableAdapter không hỗ trợ các giá trị trả về thủ tục lưu sẵn SQL khi sử dụng cuộc gọi thủ tục được lưu trữ không vô hướng. Bạn mong muốn giá trị trả về từ hàm được tạo tự động sẽ là giá trị trả về từ thủ tục được lưu trữ nhưng nó không phải là (nó thực sự là số hàng bị ảnh hưởng). Mặc dù có thể sử dụng các tham số 'out' và truyền một biến như một ref cho các hàm được tạo tự động nhưng nó không phải là một giải pháp rất sạch sẽ.

Tôi đã thấy một số hacks xấu xí trên web để giải quyết vấn đề này, nhưng không có giải pháp tốt. Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

Thật vậy, tôi có cùng một vấn đề, thật lố bịch khi các giá trị trả về không được hỗ trợ, mà không cần hack – nicodemus13

Trả lời

0

Đóng câu hỏi này vì nó xuất hiện giá trị trả về không được hỗ trợ và không có cách giải quyết thanh lịch!

1

Cách để lấy giá trị trả về là sử dụng SqlParameter trên đối tượng SqlCommand có hướng đặt là ParameterDirection.ReturnValue. Bạn nên kiểm tra thuộc tính SelectCommand của TableAdapter sau khi gọi Fill.

+0

Thuộc tính SelectCommand là (AFAIK) riêng cho TableAdapter. Do đó, tôi sẽ phải mở rộng mỗi TableAdapter với một phần lớp, theo ý kiến ​​của tôi, không phải là giải pháp tao nhã mà tôi hy vọng sẽ tìm thấy. –

0

Tôi không thể nói chắc chắn vì tôi không sử dụng TableAdapters, nhưng bạn có thể cần xem xét thủ tục đã lưu trữ của mình và bao gồm các bước sau xung quanh quy trình của bạn.

SET ROWCOUNT OFF 

BEGIN 
<Procedure Content> 
END 

SET ROWCOUNT ON 
+0

Cảm ơn bạn đã đề xuất, nhưng rất tiếc, việc cài đặt ROWCOUNT dường như không giải quyết được vấn đề của tôi. –

1

LƯU Ý: Cách đi đang sử dụng một SqlParameter nơi Direction = ParameterDirection.ReturnValue

Với những gì đã nói, như ai đó SqlParameters đã đề cập, đây là một phương pháp thay thế động sử dụng một DataSet. (Nếu thats làm thế nào bạn đi xe):

Ví dụ câu lệnh SQL và C# như Fallows:

string sql = @"DECLARE @ret int 
      EXEC @ret = SP_DoStuff 'parm1', 'parm2' 
      SELECT @ret as ret"; 

DataSet ds = GetDatasetFromSQL(sql); //your sql to dataset code here... 

int resultCode = -1; 
int.TryParse(ds.Tables[ds.Tables.Count-1].Rows[0][0].ToString(), out resultCode); 

Kết quả thủ tục lưu trữ được nạp vào một DataSet và sẽ có nhiều DataTables như trở lại câu chọn trong thủ tục lưu trữ .

DataTable cuối cùng trong Tập dữ liệu sẽ có 1 hàng và 1 cột sẽ chứa giá trị trả về thủ tục được lưu trữ.

1

Trên thực tế, tất cả các bạn cần làm là để trở về giá trị cuối cùng của bạn từ thủ tục lưu trữ bằng cách sử dụng câu lệnh SELECT, không phải là một tuyên bố RETURN. Kết quả của SELECT sẽ là giá trị trả về. Ví dụ, nếu bạn chỉ cần tạo câu lệnh exit của bạn "SELECT 1" thì bạn sẽ lấy lại 1. Bây giờ chỉ cần SELECT thanh vô hướng thực mà bạn muốn trả về.

Các vấn đề liên quan