Có thể truy cập vào SQL Server "thông báo sản phẩm phụ" thông qua ADO.NET không? Do thiếu từ, bởi "thông báo sản phẩm phụ", tôi có nghĩa là đầu ra xuất hiện trong tab Thông báo trong Microsoft SQL Server Management Studio. Những gì tôi đặc biệt có tâm trí là đọc đầu ra của SET STATISTICS TIME ON. Có vẻ như SqlDataReader không cung cấp bất cứ điều gì trong vấn đề này.Truy cập vào các tin nhắn SQL Server qua ADO.NET
Trả lời
Vâng, có một sự kiện trên lớp SqlConnection
gọi SqlInfoMessage
, mà bạn có thể móc vào:
SqlConnection _con =
new SqlConnection("server=.;database=Northwind;integrated Security=SSPI;");
_con.InfoMessage += new SqlInfoMessageEventHandler(InfoMessageHandler);
Các xử lý sự kiện sẽ trông như thế này:
static void InfoMessageHandler(object sender, SqlInfoMessageEventArgs e)
{
string myMsg = e.Message;
}
Các e.Message
là thông điệp in ra cửa sổ thông báo trong SQL Server Management Studio.
Cảm ơn bạn đã phản hồi ở trên. Tôi chỉ làm một thử nghiệm nhỏ và tìm thấy một chút trục trặc bất ngờ (một lỗi?) Khi đọc tin nhắn (trong trường hợp này được tạo ra bởi SET STATISTICS TIME ON) từ một kết quả multi-recordset. Như được chỉ ra dưới đây, người ta phải gọi NextResult ngay cả sau khi kết quả cuối cùng để nhận được tin nhắn cuối cùng. Điều này là không cần thiết trong trường hợp của một kết quả recordset duy nhất.
using System;
using System.Data.SqlClient;
namespace TimingTest
{
class Program
{
static void Main(string[] args)
{
SqlConnection conn = new SqlConnection("some_conn_str");
conn.Open();
conn.InfoMessage += new SqlInfoMessageEventHandler(Message);
SqlCommand cmd = new SqlCommand("some_sp", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read()) { };
rdr.NextResult();
while (rdr.Read()) { };
// this is needed to print the second message
rdr.NextResult();
rdr.Close();
conn.Close();
}
static void Message(object sender, SqlInfoMessageEventArgs e)
{
Console.Out.WriteLine(e.Message);
}
}
}
Điều này sẽ tuyệt vời như một câu trả lời cho một câu hỏi riêng biệt, ví dụ: "Làm cách nào để nhận được thông báo thông tin cuối cùng sau khi thực hiện truy vấn trả về nhiều bộ kết quả?" hoặc một cái gì đó tương tự. –
Là một nhận xét về mã cho bất kỳ ai không biết, các vòng trống trong khi cũng có thể được viết như sau: 'while (rdr.Read());' –
- 1. Truy cập SQL Server Instance qua NAT
- 2. SQL Server Bulk Insert Truy cập Issue
- 3. C++ Truy cập vào SQL Server từ Linux
- 4. Gửi tin nhắn SMS/Tin nhắn văn bản qua PHP
- 5. Gracefully chấm dứt truy vấn SQL Server chạy dài từ ADO.NET
- 6. Truy cập vào tập kết quả từ trong các thủ tục được lưu trữ Transact-SQL SQL Server
- 7. Hiệu suất của SQL Server trong ADO.NET vs SSMS
- 8. Kiểm tra mã SMS mà không cần truy cập vào gói nhắn tin
- 9. SPID của một SqlConnection (SQL-Server) trong ADO.NET
- 10. Truy cập đa luồng vào tập tin
- 11. Cách lưu lượng truy cập SQL Server được mã hóa?
- 12. Nhắn tin qua ngôn ngữ chéo
- 13. gửi tin nhắn văn bản qua .net
- 14. Truy cập từ xa vào Team Foundation Server 2010
- 15. truy cập vai trò "công khai" trong SQL Server
- 16. Cách tốt nhất để truy cập cơ sở dữ liệu SQL Server bằng C# .Net
- 17. Vô hiệu hóa hoàn toàn quyền truy cập từ xa vào SQL Server
- 18. Tin nhắn vượt qua và khóa
- 19. Hạn chế quyền truy cập Đăng nhập SQL Server vào chỉ một cơ sở dữ liệu
- 20. Chụp tất cả các Tin nhắn Windows
- 21. Làm cách nào để truy cập SQL Server từ các ứng dụng Windows 8?
- 22. Làm cách nào để bật các giao dịch lồng nhau với ADO.NET và SQL Server?
- 23. Làm thế nào để truy cập dữ liệu oracle bằng cách sử dụng LINQ thông qua ADO.net?
- 24. Gửi tin nhắn đến người dùng qua tín hiệu django
- 25. Chèn GUID vào SQL Server
- 26. lưu tin nhắn pylint vào một tệp
- 27. Thực hiện máy nhắn tin qua dịch vụ WCF
- 28. Khung thực thể ADO.NET với nguồn dữ liệu truy cập OLE DB
- 29. Liệt kê các truy vấn đang chạy trên SQL Server
- 30. ADO.net SQL Server 2012 - Query với phím composite và MissingSchemaAction.AddWithKey không đúng sẽ thêm khó khăn
+1 cho điều này. Nó nằm dưới mũi của tôi trong ADO ('OnInfoMessage') trong hơn một thập kỷ; tôi chỉ không bao giờ đánh giá cao nó là gì. –