2016-03-21 14 views
1

Veritabanından veri almak için SqlDataSource nesnesini kullanan bir yöntemin arkasında bir kod var, daha sonra kayıtları görüntülemek için benim kılavuz görünümüm için bir veri kaynağı olarak kullanılır. SelectCommand sorgumun WHERE yan tümcesine koşullu olarak başka bir koşul eklemem gerekiyor ve verileri parametreler aracılığıyla sorguya iletmem gerekiyor. Bunu nasıl yaparım? Arka planda kodda SqlDataSource.SelectCommand içinde parametreli sorgular nasıl kullanılır?

SqlDataSource sds = new SqlDataSource(); 

sds.SelectCommand = "Select CustomerName, LoanNumber, LoanDate FROM Loan WHERE IsActive = 1 "; 

if (filterRecord != "All") { // DDL filter on page, all records by default 
    sds.SelectCommand += "AND LoanType = ??"; //this is where I need to parameterize my query 
} 

Ben

if (filterRecord != "All") { 
    sds.SelectCommand += "AND LoanType = @LoanType"; 
    sds.SelectParameters.Add("@LoanType", "Mortgage"); 
} 

gibi bir şey düşündük Ama bu işe görünmüyor.

Sana Veri kaynağı Nesne kullandığınızı kabul etmedi
+0

'Ancak bu işe yaramaz. 'Ne işe yaramıyor? Bir istisna var mı? – LarsTech

+0

"Değişken skaler değişken" @LoanType "yazıyor. – wizloc

+0

" LoanType = ?? 'veya" LoanType = @ LoanType "kullandınız mı? – LarsTech

cevap

1

ve SqlDataReader nesnesiyle kayıtları okuma. Aşağıdakine benzer bir şey kullanarak sorguya parametreleri ekleyebilirsiniz:

SqlCommand cmd = new SqlCommand(queryString, connection); 
cmd.Parameters.AddWithValue("@paramName", value); 

Daha sonra, veri kaynağı olarak bildirerek, tablo görünümüne SqlDataReader bağlayabilir her zamanki gibi.

+0

kontrol edin.Çünkü ben sona erdi SqlDataSource'a parametrelerin nasıl ekleneceğini asla çözemedim – wizloc

0

:

<asp:Parameter Name="LoanType" Type="String" DefaultValue="default" /> 

Değişim için seçme komutu:

"Select CustomerName, LoanNumber, LoanDate FROM Loan WHERE IsActive = 1 AND (@LoanType="default" or LoanType [email protected])" 

SQL veri kaynağına bir ASP parametre ekle

Ardından, kodunuzun arkasında şunu yapın:

if (filterRecord != "All") { 
    sds.SelectParameters("LoanType").DefaultValue="Mortgage" 
} 

Açıklama: Arkasındaki kodu düzenlemeden önce ASP web formundaki sql parametresini tanımlamanız gerekir. "Varsayılan" kukla değeri olan bir parametre tanımladım. Bu nedenle, eğer parametrede @LoanType parametresinin arkasındaki parametreyi değiştirmezseniz, "default" dizgisine eşittir ve @ LoanType = "default" tüm satırlar için true değerini döndürür ve LoanType = @ LoanType değerini dikkate almaz. Bununla birlikte, @ LoanType = "varsayılan" öğesinin arkasındaki kodu değiştirirseniz, false değerini döndürür ve her satır için LoanType = @ LoanType öğesinin ne olacağını istediğinizle sonuçlandığını denetler.

Benim ESKİ Cevap: Eğer SQL veri kaynağını kullanmayın ve size sql komutunu kullanırken bu iyidir ben Sorgunuzla tanımlamak için bir SqlCommand nesnesi geçiş tavsiye ediyorum

if (filterRecord != "All") { 
    SqlParameter Parameter = new SqlParameter(); 
    Parameter.ParameterName = "@LoanType"; 
    Parameter.SourceColumn = "LoanType"; 
    Parameter.SqlDbType = SqlDbType.NVarChar; 
    Parameter.Value = "Mortgage"; 

    sds.SelectCommand += "AND LoanType = @LoanType"; 
    sds.SelectParameters.Add(Parameter); 
} 
+0

Ben de aspx sayfasında değil, arkasındaki kodda SQLDataSource kullanıyorum.herhangi bir tavsiye var mı? – wizloc

+0

Tamam.Aşağı değiştirdim.Yeni bir – Amir

İlgili konular