2013-02-28 26 views
6

@ işareti, SQL sorgusu parametrelerinin önüne eklendiğinde ne yapar? örneğinBir parametre adının önünde @ nedir?

:

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

Pek çok cevap lol! –

+0

Not: @ parametresi adı için gerekli değildir, sadece sql ifadesi. – eschneider

cevap

5

Diğer insanların söyledikleri aksine, @ karakteri hiçbir şey yapmaz. Sen

.AddWithValue("ParaName",value); 

veya

.AddWithValue("@ParaName",value); 

ile parametre eklemek ya Ve ikisi DB tarafında @ParamName adında bir parametrenin eşleştirilir. Bu yüzden gerekli DEĞİLDİR.

Bunu söyledikten sonra, veritabanı tarafında tam olarak nasıl adlandırılacağı için parametre @ değerini her zaman kullanmak oldukça standart bir uygulamadır.

+0

Evet, programlama yaparken aynı şeyi düşünmüştüm ama parametreden çıkıp @ kodumun SQL enjeksiyonu için daha savunmasız olduğu anlamına gelen bir kişi tarafından söylendi. ya da ... – bandaa

+0

@bandaa hiç değilse, en azından bu bağlamda değil! Parametreler kullanıyorsunuz ve SQL enjeksiyon saldırılarına eğilimli değiller. – Icarus

+0

@bandaa: Sql Enjeksiyon tehdidi, parametrelenmemiş sorgular hakkında * 'çoğunlukla '*. Örn: '' tablo1'den col1'i seçin, burada x = '"+ txtName.Text +"' "'. Burada, 'txtName.Text' herhangi bir şey olabilir ve eğer '' içinde '' varsa, sorguyu da kırabilir ... – Kaf

1

Hiçbir şey büyülü - Sadece sözdizimi SQL parametrelerini ve yerel değişkenleri belirtmek için kullandığı oluyor.

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

veya değişken adları gibi ayrılmış kelime kullanmanızı sağlar:

string @class = "Geometry"; 
7

sadece var Bu dize hazır kaçış dizileri işlemek için değil derleyici söyler C# @ karakter olarak aynı değil sütunun bir alanını kullanmaya çalışmak yerine sorguda bir parametre adı olduğunu belirtir.

O SqlParameter nesne oluşturarak zaman daha çok gerekli olmasından bağımsız olarak net değil, ama

0

@ o, değeri komut dışından geçirilebilir bir giriş/çıkış parametresi olduğunu söylüyor :) tutarlı olması için mantıklı düşünmek .

+2

Bir çıktı parametresi de olabilir :) –

0

@ işareti SqlParameterCollectionparametre ismi ile anlamına gelmektedir. Sütundan alan kullanımı.

Parameters 

parameterName 
Type: System.String 

The name of the parameter. 
0

bu durumda @ bir SQL Server oluşumudur. T-SQL (SQL Server programlama dili) değişkenler için @ sembolünü kullandığından, SQL Server sorguları için parametreler @ simgesiyle belirtilir.

İlgili konular