Khi tôi gặp lỗi này trong Visual Studio,
Có một lỗi liên quan đến mạng hoặc trường hợp cụ thể xảy ra trong khi thiết lập kết nối với SQL Server. Máy chủ này không tìm thấy hoặc không thể truy cập được. Xác minh rằng tên ví dụ là chính xác và SQL Server được cấu hình để cho phép kết nối từ xa. (nhà cung cấp: Nhà cung cấp ống có tên, lỗi: 40 - Không thể mở kết nối với SQL Server)
... đó là trong quá trình thực thi mã C # sau, nó đã cố lấy dữ liệu SQL Server của tôi để hiển thị nó trong một lưới. Sự cố xảy ra chính xác trên dòng có kết nối.Open ():
using (var connect = Connections.mySqlConnection)
{
const string query = "SELECT Name, Birthdate, Narrative FROM Friends";
using (var command = new SqlCommand(query, connect))
{
connect.Open();
using (var dr = command.ExecuteReader())
{
while (dr.Read())
{
// blah
}
}
}
}
Không thể giải thích được vì truy vấn SQL rất đơn giản, tôi có chuỗi kết nối đúng và máy chủ cơ sở dữ liệu có sẵn. Tôi đã quyết định tự chạy truy vấn SQL thực tế trong SQL Management Studio và nó chạy tốt và mang lại một số bản ghi. Nhưng có một điều nổi bật trong kết quả truy vấn: có một số văn bản HTML được mã hóa không chính xác trong trường loại varchar (max) trong bảng Friends (cụ thể là một số ký hiệu nhận xét được mã hóa thuộc loại được lưu <!--
trong dữ liệu của cột "Tường thuật"). Hàng dữ liệu nghi ngờ trông như thế này:
Name Birthdate Narrative
==== ========= ==============
Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Lưu ý ký hiệu HTML được mã hóa " <
", viết tắt của ký tự "<". Bằng cách nào đó đã xâm nhập vào cơ sở dữ liệu và mã C # của tôi không thể nhận được! Nó thất bại mọi lúc ngay tại đường kết nối.Open ()! Sau khi tôi chỉnh sửa thủ công một hàng dữ liệu trong bảng cơ sở dữ liệu Bạn bè và đặt ký tự "<" được giải mã thay vào đó, mọi thứ đều hoạt động! Đây là hàng nên trông như thế nào:
Name Birthdate Narrative
==== ========= ==============
Fred 21-Oct-79 <!--HTML Comment -->Once upon a time...
Tôi đã chỉnh sửa một hàng xấu mà tôi có bằng cách sử dụng câu lệnh CẬP NHẬT đơn giản dưới đây. Nhưng nếu bạn có một số hàng HTML được mã hóa vi phạm, bạn có thể cần một câu lệnh CẬP NHẬT phức tạp hơn sử dụng hàm REPLACE:
UPDATE Friends SET Narrative = '<!--HTML Comment -->Once upon a time...' WHERE Narrative LIKE '<%'
Vì vậy, đạo đức của câu chuyện là (ít nhất là trong trường hợp của tôi), vệ sinh nội dung HTML của bạn trước khi lưu trữ nó trong cơ sở dữ liệu và bạn sẽ không gặp lỗi SQL Server khó hiểu này ngay từ đầu! (Uh, vệ sinh / giải mã chính xác nội dung HTML của bạn là chủ đề của một cuộc thảo luận khác xứng đáng với tìm kiếm StackOverflow riêng nếu bạn cần thêm thông tin!)