2010-04-21 10 views
8

asp:SqlDataSource kullanarak istemci istekleri görüntüleyen asp:GridView sahibim. Görüntülenen bilgileri istemciyle sınırlamak istiyorum:asp: QueryStringParameter ve boş sorgu dizesi parametresi

View.aspx her şeyi görüntülemelidir, View.aspx?client=1 yalnızca istemci ID # 1'den gelen istekleri görüntülemelidir.

"EXEC getRequests @client" sorgusu için <asp:QueryStringParameter Name="client" QueryStringField="client" /> kullanıyorum.

Bazı istemci belirtildiğinde, her şey düzgün çalışıyor. Ama yapma - eğer değilse.

SSMS'yi SSMS kullanarak test ettim - her iki durumda da doğru şekilde çalışıyor - parametre belirtildiğinde ve olmadığı zaman (NULL açıkça geçti).

Ne yapıyorum? aksi halde, tüm müşterilerine iade, istemci 0 olup olmadığını doğrulamak gerek SP içinde

<asp:QueryStringParameter Name="client" QueryStringField="client" DefaultValue="0"/> 

ve ardından özel:

+0

Bu yaklaşımla kendinizi oldukça ciddi SQL enjeksiyon saldırı vektörlerine açıyormuşsunuz gibi görünüyor. – womp

+0

@womp: Nasıl açılıyorum? QueryStringParameter, yalnızca uygun haklara sahip olan kullanıcılar için ve birtakım çeklerden sonra kod arkasında ekleniyor. – abatishchev

+0

AH, eğer sterilize ediyorsanız, o zaman sorun değil. Sorunu doğrudan kullandığınız gibi görünüyordu. – womp

cevap

15

SqlDataSource, ateş olmaz:

<asp:SqlDataSource CancelSelectOnNullParameter="False" /> 

Aynı zamanda querystring parametresine boş varsayılan değer katmak için gerekli olabilir:

<asp:QueryStringParameter Name="client" QueryStringField="client" DefaultValue="" ConvertEmptyStringToNull="True" /> 
+1

Çok teşekkür ederim! İlk seçenek ihtiyacım olanı yapar. – abatishchev

+0

Bu gerçekten garip bir varsayılan özelliktir (yani varsayılan olarak NULL params ile çalışmalıdır). Eminim NULL 'her şeyi' belirtmek için params çok yaygındır. – Ryan

2

Örneğin, bu durumlar için parametreye bir varsayılan değeri tanımlamak gerekir bir. 's parametrelerin herhangi boş olup olmadığını, aksi belirtmedikçe

+0

gibi aptalca şeyler yapmıyorum Varsayılan değeri 'NULL' (' DBNull.Value') olarak ayarlamak mümkün mü? – abatishchev

+0

Hmm Öyle düşünmüyorum. Ama 0, -1 veya başka bir şey yerine NULL kullanmak için bir neden var mı? –

+0

'NULL' için SQL yerleşik işlevi' ISNULL (,) 'kullanmak çok kolaydır. 0 veya -1 gibi değerler ek – abatishchev