ile ada göre sorgu parametrelerini bağlama Oracle (System.Data.OracleClient
) için Microsoft ADO.NET sağlayıcısı kullanıyorum. Bunun en iyi Oracle sağlayıcısı olmadığını ve bunun will soon be deprecated olduğunu bilmekteyim, bunun yerine Oracle'ın ODP.NET'ini kullanmalıyım. MS sağlayıcısını hala kullanmamın nedeni, ODP.NET parametresinin parametreleri, isimle değil, numaralı konuma göre bağlamasıdır. Bu, bir sorguda birçok parametre kullandığınızda gerçekten bir PITA olabilir, çünkü bunları doğru sıraya eklemeye dikkat etmeniz gerekir; bu da kolayca hatalara neden olabilir.ODP.NET
SELECT A,B,C FROM FOO WHERE X = :PARAM_X OR :PARAM_X = 0
, ben aptal olduğunu düşünüyorum OracleCommand
, iki parametre eklemek zorunda ...
ODP.NET'in OracleCommand
varsayılan davranışını değiştirmek için bir özelliğe sahiptir: BindByName
. Doğru olarak ayarlandığında, parametreler istediğim addır. Maalesef bu gerçekten bana yardımcı olmuyor:
- Ben neredeyse somut ADO.NET sınıflarını açıkça kullanmak asla
- varsayılan olarak false olarak ayarlanır, ben
DbProviderFactory
(ADO.NET 2.0 soyutlama katmanı kullanmayı tercih Herhangi bir belirli RDBMS'ye bağlantıyı azaltmak için,DbConnection
,DbCommand
...). Bu nedenle,BindByName
özelliğine,OracleCommand
'a açıkça izin vermedikçe, tüm avantajları veya soyutlamayı kaybetmeden erişemiyorum. - Bir ASP.NET SqlDataSource kullanıldığında, kendim DbCommand'ı oluşturmadım, bu yüzden
BindByName
değerini true olarak ayarlama şansım yok (bunu Selecting olayında yapabilirim, ancak gerçekten bir her SqlDataSource için yapın ...)
Bu sorunu nasıl ele alabilirim? Bir yerde BindByNameByDefault
ayarı var mı? (Ben böyle bir şey bulamadık, ama onu kaçırmış olabilir ...)
Bu "özellik" nedeniyle 3 saat harcadım! – Grzenio