2013-02-28 36 views
6

Dấu hiệu @ là gì khi được chèn vào trước các tham số Truy vấn SQL?@ ở phía trước tên thông số làm gì?

ví dụ:

using (SqlCommand cmd = new SqlCommand("INSERT INTO [User] values (@Forename, @Surname, @Username, @Password)", con)) 
{ 
    cmd.Parameters.AddWithValue("@Forename", txtForename.Text); 
    cmd.Parameters.AddWithValue("@Surname", txtSurname.Text); 
    cmd.Parameters.AddWithValue("@UserName", txtUsername.Text); 
    cmd.Parameters.AddWithValue("@Password", txtPassword.Text); 

    cmd.ExecuteNonQuery(); 
} 
+0

Rất nhiều câu trả lời lol! –

+0

Lưu ý: @ không cần thiết cho tên thông số, chỉ có câu lệnh sql. – eschneider

Trả lời

5

Trái với những gì người khác đã nói ở đây, ký tự @ không làm gì cả. Bạn có thể thêm các tham số với

.AddWithValue("ParaName",value); 

hoặc

.AddWithValue("@ParaName",value); 

Và cả hai đều sẽ được kết hợp với một paramater tên @ParamName ở phía bên DB. Vì vậy, nó là không cần thiết.

Có nói rằng, thực hành khá chuẩn là luôn sử dụng @ ở phía trước tham số vì đó chính xác là cách nó được đặt tên ở phía cơ sở dữ liệu.

+0

yeah tôi đã nghĩ như vậy khi tôi đang lập trình, nhưng tôi đã được một ai đó để lại tham số không có @ có nghĩa là mã của tôi dễ bị tấn công hơn với SQL injection hoặc ... – bandaa

+0

@ bandaa không hề, ít nhất là không phải trong ngữ cảnh này! Bạn đang sử dụng các tham số và chúng không dễ bị tấn công SQL injection. – Icarus

+0

@bandaa: Mối đe dọa Sql Injection là * 'chủ yếu' * về các truy vấn không được tham số hóa. Ví dụ: '" chọn col1 từ bảng 1 trong đó x = '"+ txtName.Text +"' "'. Ở đây, 'txtName.Text' có thể là bất cứ thứ gì và nó có thể phá vỡ truy vấn nếu nó có' ''trong nó ... – Kaf

1

Không có gì huyền diệu - Nó chỉ là SQL cú pháp sử dụng để biểu thị các thông số và các biến địa phương. Nó không giống như các nhân vật C# @ mà nói với trình biên dịch không để xử lý thoát-chuỗi trong chuỗi literals:

string stringWithSlashes = @"Use '\n' to add a new line"; 

hoặc cho phép bạn sử dụng các từ dành riêng như tên biến:

string @class = "Geometry"; 
7

Đó chỉ những gì chỉ ra rằng nó tên thông số trong truy vấn - trái với việc cố gắng sử dụng một trường từ cột.

Nó không rõ ràng cho dù đó là nghiêm chỉnh cần thiết khi xây dựng các đối tượng SqlParameter, nhưng tôi nghĩ rằng nó làm cho tinh thần để phù hợp :)

0

@ nói nó là một tham số đầu vào/đầu ra có giá trị có thể được truyền từ bên ngoài kịch bản .

+2

Có thể là tham số đầu ra :) –

0

@ dấu hiệu có nghĩa là trên SqlParameterCollectiontên tham số. Sử dụng trường từ cột.

Parameters 

parameterName 
Type: System.String 

The name of the parameter. 
0

@ trong trường hợp đó là cấu trúc SQL Server. Các tham số cho các truy vấn SQL Server được xác định bằng ký hiệu @ vì T-SQL (ngôn ngữ lập trình SQL Server) sử dụng biểu tượng @ cho các biến.

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