hocam bence entity framework kullan kullanıcıdan aldığın değeri temizlemeden sorguya gnderme onun dışında güvenlikle ilgili problem yaşayacağını sanmıyorum. Bende o güvenlik olayını bi ara baya taktımda ondan sylüyorum boşuna kafa yormaya gerek yok :)

public List sorulari_cek { List soru_listesi = new List ; string mycommand = "select from sorular where grup in order by NewID "; SqlCommand com = new SqlCommand ; com. Parameters. AddWithValue ; con. Open ; SqlDataReader rd = com. ExecuteReader ; while (rd. Read con. Close ; return soru_listesi; } Kod tarafından kelime isimli string değişkenimi 2,15,6,0 şeklinde direk yolluyorum class taki fonksiyona 2. 15. 6. ve 0. gruba ait soruları getırsın diye ama runtime da Conversion failed when converting the varchar value '1,2,0' to data type int." gibisinden hata veriyo 1,2,0 kısmı yerine kelime yazıyo bazen hatada biraz baktım cast ve convert fonksıyonu kullan demısler beceremedım onuda 1-2 denedım olmadı. sql de İN operatorune nasıl değişken sayıda parametre yollayabilirim.? 1,2,0 olarak verdiğin kelime stringi aslında 1 değil 3 parametre barındırıyor. O nedenle aslında 3 farklı parametre olarak gnderilmesi gerekiyor. Ama sen kodunda bunu tek parametre üzerinden geçirmeye çalışıyorsun, int istediği değeri string olarak gnderiyorsun, bu da yanlış olduğundan hataya düşüyorsun. Parametre kullanmayıp direk string olarak verdiğinde de problem bu nedenle ortadan kalkıyor. Burada çzümün bu şekilde ilerlemek olacak ise nerim burada gelen değişken sayına gre dinamik olarak sql command oluşturacak bir yapı kurman olacaktır. Yani query'i gelen kelime ğesine gre kendin server side'da oluşturabilirsin. kelime değişkenin ile gelen datalar nereden geliyor bilmiyorum ama işin içine güvenlik girdiğinden manipule edilebilecek bir yerden geliyorsa her türlü açık verirsin. Bu değerler dropdownlist, radiobuttonlist'den geliyorsa sayfa içeriğini htmlden düzenleyerek, querystring den geliyorsa urlden düzenleyerek manipule etmeye açık olacaktır. O nedenle query de parametre ile ilerlemeni neririm. Dinamik query oluşturmak için birkaç rneğim olsa gerek. İhtiyacın olur ise mesaj atarsan yardımcı olmaya çalışırım. CuCo tarafından 31/Eki/14 10:06 tarihinde düzenlenmiştir

public List sorulari_cek { List soru_listesi = new List ; string mycommand = "select from sorular where grup in order by NewID "; SqlCommand com = new SqlCommand ; com. Parameters. AddWithValue ; con. Open ; SqlDataReader rd = com. ExecuteReader ; while (rd. Read con. Close ; return soru_listesi; } Kod tarafından kelime isimli string değişkenimi 2,15,6,0 şeklinde direk yolluyorum class taki fonksiyona 2. 15. 6. ve 0. gruba ait soruları getırsın diye ama runtime da Conversion failed when converting the varchar value '1,2,0' to data type int." gibisinden hata veriyo 1,2,0 kısmı yerine kelime yazıyo bazen hatada biraz baktım cast ve convert fonksıyonu kullan demısler beceremedım onuda 1-2 denedım olmadı. sql de İN operatorune nasıl değişken sayıda parametre yollayabilirim.?

@FCN hocam çzümü de sylermisin nasıl yapayım? sorguya convert, cast gibi bıseyler mı eklemem lazım neden hata veriyor?

Şu linkte sanırım tam olarak senin sorunun çzümü var hocam. Bi bak istersen. http://stackoverflow.com/a/2377651/2877080 MadJack tarafından 22/Eki/14 16:45 tarihinde düzenlenmiştir Everyone sees just what they want to see.

bu rnekte burdaki kelime stringinde, checkboxlistteki listitemlerin value larını tutuyorum tüm checkboxlist i gezıyorum kullanıcı hangi itemlere tik koymussa kelime değişkenime sırası ile o itemlerin value larını ekliyorum. Yani bu rnek için risk olmaz sanırım kullanıcı bi yere bişey yazmamıs oluyo. Entity Framework ile ilgili bişeyler okuyodum şimdi de performans olarak iyi değil yazmıs birisi?

SinusX bunu yazdı Cevabı vermiş zaten Conversion failed when converting the varchar value '1,2,0' to data type int." SQL deki grup'un tipi int sen string gndermeye çalışıyorsun Onun yerine kelimeyi int array'e çevirip com. AddArrayParameters olarak çalışması lazım var groups = kelime. Split . Select(i=>int. Parse . ToArray ; com. AddArrayParameters ; gibi Tamam cevabı vermiş ama sentaks bilgim tam olmadığı için kod kısmında ne yazacağımı bilemedim. O string değişkeni nasıl diziye çevirip argüman olarak vericem onu yapamadım. Sen burda sentaks ı uydurmaca yazdın dimi hocam? addarrayparameters bende çıkmadı ama? ben function kullanıyorum gelen string'i sql table 'a çeviriyor bu sayede parametre kullanabilirsin injection'ı engellersin http://stackoverflow.com/questions/5257427/sql-server-string-to-table-function burayı okuyabilirsin yapamazsan haber et akşama bakalım hacı www.yesilgrow.com - Growshop

Hannibal_King bunu yazdı bu rnekte burdaki kelime stringinde, checkboxlistteki listitemlerin value larını tutuyorum tüm checkboxlist i gezıyorum kullanıcı hangi itemlere tik koymussa kelime değişkenime sırası ile o itemlerin value larını ekliyorum. Yani bu rnek için risk olmaz sanırım kullanıcı bi yere bişey yazmamıs oluyo. Entity Framework ile ilgili bişeyler okuyodum şimdi de performans olarak iyi değil yazmıs birisi? boşver hocam onları sen adoyu grenme demiyorum zaten yle çok aktaksiyonu yok 1 proje yap tamam de ado oturdu sonra entity ile devam et kod ezberleme mantık oturunca internetten bakıyon kodlara zaten benim gibi boşuna amelelik yapma okulda bizede dediler ado ado ado grendik o kadar kastik iş yerinde 1 kere yaptim tepki şuydu olm napiyon sen manyakmisin entity ile yapsana piyasada en tutucu adocular bide artik entity yapıyor boşuna amelelik yapmaktan bıkmışlar kime sql desem entity diyor. baktım evet daha kolay ama sql i tam anlamadan geçmek bence yanlış olur. bütün sorguları çalışan bir uygulama yapıp geçmek daha mantıklı https://www.youtube.com/watch?v=WC3-71NKwPw

Cevabı vermiş zaten Conversion failed when converting the varchar value '1,2,0' to data type int." SQL deki grup'un tipi int sen string gndermeye çalışıyorsun Onun yerine kelimeyi int array'e çevirip com. AddArrayParameters olarak çalışması lazım var groups = kelime. Split . Select(i=>int. Parse . ToArray ; com. AddArrayParameters ; gibi Tamam cevabı vermiş ama sentaks bilgim tam olmadığı için kod kısmında ne yazacağımı bilemedim. O string değişkeni nasıl diziye çevirip argüman olarak vericem onu yapamadım. Sen burda sentaks ı uydurmaca yazdın dimi hocam? addarrayparameters bende çıkmadı ama?

Saolun cevaplar için...

string mycommand = "select from sorular where grup in "+ kelime +"order by NewID "; Bu şekilde yap hacı abi neden birdaha diğer türlü uğraşıyorsun ki?

GUS bunu yazdı Hannibal_King bunu yazdı bu rnekte burdaki kelime stringinde, checkboxlistteki listitemlerin value larını tutuyorum tüm checkboxlist i gezıyorum kullanıcı hangi itemlere tik koymussa kelime değişkenime sırası ile o itemlerin value larını ekliyorum. Yani bu rnek için risk olmaz sanırım kullanıcı bi yere bişey yazmamıs oluyo. Entity Framework ile ilgili bişeyler okuyodum şimdi de performans olarak iyi değil yazmıs birisi? boşver hocam onları sen adoyu grenme demiyorum zaten yle çok aktaksiyonu yok 1 proje yap tamam de ado oturdu sonra entity ile devam et kod ezberleme mantık oturunca internetten bakıyon kodlara zaten benim gibi boşuna amelelik yapma okulda bizede dediler ado ado ado grendik o kadar kastik iş yerinde 1 kere yaptim tepki şuydu olm napiyon sen manyakmisin entity ile yapsana piyasada en tutucu adocular bide artik entity yapıyor boşuna amelelik yapmaktan bıkmışlar kime sql desem entity diyor. baktım evet daha kolay ama sql i tam anlamadan geçmek bence yanlış olur. bütün sorguları çalışan bir uygulama yapıp geçmek daha mantıklı kavramları yanlış kullanıyorsunuz. sql ile entitiy framework karşılaştırılması yapılamaz ncelikle. yle olsaydı EF ile sql sorgu çalıştıramazdın. Konu sahibinin yazdığı kodlar Ado. NET ile alakalı, bir süre nce ise alternatif olarak model bazlı bir yapı yayımlandı, entity framework. 3 parçaya ayrılan EF ile 1- model first 2- code first 3- db first veritabanı işlemlerinizi yapabilirsiniz. Bu 3 yapının da kendine gre avantajları var Ado. NET boşverilmez elbette, çünkü yazılımda mümkün mertebe bir çok konuya hakim olmalı, ama geçmiş teknolojileri/yapıları iyi bilse de yeni teknolojilere açık olup onları ğrenmeli. Aksi takdirde kaliteli firmalarda kendine yer bulamaz. Neden geçmiş şeyleri ğrenmeli? Karşılayacağınız sistem her zaman yeniye uyarlı olmayabilir, mesela güncellenmesi gereken bir projede ado. net kullanılmışsa, kişi sadece EF biliyorsa ğrenmek için tekrar uğraşması lazım. Ama yeni bir proje yapılıyorsa ve veritabanı yapısı uygunsa ado. net yerine EF kullanılabilir. Her ne kadar projeye gre hareket etmek gerekse de EF kullanmanın bir çok avantajı mevuct. Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.

zeybekustasi bunu yazdı GUS bunu yazdı Hannibal_King bunu yazdı kavramları yanlış kullanıyorsunuz. sql ile entitiy framework karşılaştırılması yapılamaz ncelikle. yle olsaydı EF ile sql sorgu çalıştıramazdın. Konu sahibinin yazdığı kodlar Ado. NET ile alakalı, bir süre nce ise alternatif olarak model bazlı bir yapı yayımlandı, entity framework. 3 parçaya ayrılan EF ile 1- model first 2- code first 3- db first veritabanı işlemlerinizi yapabilirsiniz. Bu 3 yapının da kendine gre avantajları var Ado. NET boşverilmez elbette, çünkü yazılımda mümkün mertebe bir çok konuya hakim olmalı, ama geçmiş teknolojileri/yapıları iyi bilse de yeni teknolojilere açık olup onları ğrenmeli. Aksi takdirde kaliteli firmalarda kendine yer bulamaz. Neden geçmiş şeyleri ğrenmeli? Karşılayacağınız sistem her zaman yeniye uyarlı olmayabilir, mesela güncellenmesi gereken bir projede ado. net kullanılmışsa, kişi sadece EF biliyorsa ğrenmek için tekrar uğraşması lazım. Ama yeni bir proje yapılıyorsa ve veritabanı yapısı uygunsa ado. net yerine EF kullanılabilir. Her ne kadar projeye gre hareket etmek gerekse de EF kullanmanın bir çok avantajı mevuct. hocam bende bunu dedim ama byle detay verince insanların kafası karışıyor bu ufak tefek şeylere takan adamlar için tam bir kabus oluyor EF mi Ado mu EF ama model mi code mu db first mü bylece adam programlamaya başlamadan db den soguyor ben hepsini araştırmıştım bak araştırma demiyorum byle şeyler olduğunu gren hepsi ilede yapabiliyorsan bir uygulama yap yapamıyorsanda çok takma bence Entity de db first şeklinde gidebilirsin gayet kolay ve akıcı yapacağın şey SQL serverda tablo yapılarını kurup visual studioya aktarmak oluyor @Hannibal_King adoda db den verileri alıp class oluşturup gezdiriyonya projede entity de classların hepsini otomatik kendi oluşturuyo hani kendi yapıyor diye yanlış algılama kontrol bende degilmiş hissi uyandırmasın herşey kitabına uygun hiçbir sıkıntısı yok @unbalanced hocam code first ile falanda proje yaptımda 1 yaptım 2 yaptım sonra nedir bu amelelik ulan diosun bırakıyosun çünkü işte yle sınırsız zamanın yok adam diyor proje yarına yetişcek e oturda code first ile db yapip 1 günde proje çıkar. hocam nerde çalışıyon ne ediyon bilmiyom ama türkiyedeki ajans politikası byle genelde GUS tarafından 19/Eki/14 18:40 tarihinde düzenlenmiştir

Cevabı vermiş zaten Conversion failed when converting the varchar value '1,2,0' to data type int." SQL deki grup'un tipi int sen string gndermeye çalışıyorsun Onun yerine kelimeyi int array'e çevirip com. AddArrayParameters olarak çalışması lazım var groups = kelime. Split . Select(i=>int. Parse . ToArray ; com. AddArrayParameters ; gibi SinusX tarafından 21/Eki/14 19:13 tarihinde düzenlenmiştir Si vis pacem para bellum.

Code first çalışman şart değil hocam, eğer db yi ayrı tasarlamışsan direk olarak db yi ekleyip modelini yaratabilirsin bu çok daha kolay olur. türkiyesini bilmem hocam da yarın projeyi teslim et demenin bir mantığı yok. Yazılım geliştirmenin aşamaları var. Bu sebeple ülkemizdeki yazılımlar dünya çapında değil. Dandik muhasebe programlarında bile yığınla hata olabiliyor. Neden? Kendine yazılımıcı diyen adamların ne design patternlerden ne unit testlerden haberi var. Tasarım ekranında butona çift tıklayıp tüm kodu oraya yazan dangalaklar profesyonelim diye ortada geziyor Projeden kastın nedir bilmem ama benim çalıştığım projeler aylar süren işler hocam, iki satırda yaz işin içinden çık olayı yok, ayrıca içerisinde AR&GE de barındırdığı için en temiz şekilde kodunu yazmak zorundasın. Kendini bu şekilde yetiştirmeye bak. Ve sana bu imkanları sağlayan firmalarda çalışmanı tavsiye ederim. Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.

dediğin gibi yaptım oldu hocam peki bu yntem güvenlik açısından sıkıntılı olur mu bazı yerlerde parametreli kullanın demişlerde hep

@mfe25 ve @Sharp hocam şimdi inceliyicem ingilizcemde çok ktü yapamazsam pm atarım size

edit: anlamamışım acemi-webci tarafından 22/Eki/14 17:11 tarihinde düzenlenmiştir...

bu rnekte burdaki kelime stringinde, checkboxlistteki listitemlerin value larını tutuyorum tüm checkboxlist i gezıyorum kullanıcı hangi itemlere tik koymussa kelime değişkenime sırası ile o itemlerin value larını ekliyorum. Yani bu rnek için risk olmaz sanırım kullanıcı bi yere bişey yazmamıs oluyo. Entity Framework ile ilgili bişeyler okuyodum şimdi de performans olarak iyi değil yazmıs birisi? boşver hocam onları sen adoyu grenme demiyorum zaten yle çok aktaksiyonu yok 1 proje yap tamam de ado oturdu sonra entity ile devam et kod ezberleme mantık oturunca internetten bakıyon kodlara zaten benim gibi boşuna amelelik yapma okulda bizede dediler ado ado ado grendik o kadar kastik iş yerinde 1 kere yaptim tepki şuydu olm napiyon sen manyakmisin entity ile yapsana piyasada en tutucu adocular bide artik entity yapıyor boşuna amelelik yapmaktan bıkmışlar

dediğin gibi yaptım oldu hocam peki bu yntem güvenlik açısından sıkıntılı olur mu bazı yerlerde parametreli kullanın demişlerde hep Hocam parametre olarak vermekle direkt olarak byle yazmak arasında bir fark olduğunu sanmıyorum. Sonuçta birini direkt olarak veriyorsun, diğerini parametre olarak veriyorsun. He eğer güvenlik çok nemliyse management studio ile sql fonksiyonu yazıp o fonksiyona parametre olarak verirsin, bylece yazdığın kodun güvenliğinden emin olabilirsin..

Hannibal_King bunu yazdı dediğin gibi yaptım oldu hocam peki bu yntem güvenlik açısından sıkıntılı olur mu bazı yerlerde parametreli kullanın demişlerde hep Hocam parametre olarak vermekle direkt olarak byle yazmak arasında bir fark olduğunu sanmıyorum. Sonuçta birini direkt olarak veriyorsun, diğerini parametre olarak veriyorsun. He eğer güvenlik çok nemliyse management studio ile sql fonksiyonu yazıp o fonksiyona parametre olarak verirsin, bylece yazdığın kodun güvenliğinden emin olabilirsin.. + query + şeklinde yaptığın sorgular sql injectiona açık sorgulardır. queryini bir temizleme fonksiyonundan geçirmeli veya parametre olarak kullanmalısın.