Şu anda Entity Framework 6 ve muhtemelen ADO.NET'te bir hata yaşıyorum düşünüyorum. Bir son tarih olduğundan, bu hatanın düzeltilmesini bekleyebileceğimden emin değilim ve umarım birisi bana temiz bir çalışma konusunda yardımcı olabilir.
Sorun, sorgu 0,01 ve 0,05 olması gereken yerlerde 1 ve 5 değerlerini kullanmasıdır. Ancak tuhaf bir şekilde 0.1 çalışıyor gibi görünüyor
Oluşturulan sorgu şu anda: (SQL Server Profiler'dan alınmıştır)
declare @p3 dbo.someUDT
insert into @p3 values(NULL,5)
insert into @p3 values(5,0.10)
insert into @p3 values(NULL,1)
insert into @p3 values(1,2)
exec sp_executesql N'Select * from @AName',N'@AName [dbo].[someUDT] READONLY',@AName=@p3
Doğru kod olsa da:
declare @p3 dbo.someUDT
insert into @p3 values(NULL,0.05)
insert into @p3 values(0.05,0.10)
insert into @p3 values(NULL,0.01)
insert into @p3 values(0.01,0.02)
exec sp_executesql N'Select * from @AName',N'@AName [dbo].[someUDT] READONLY',@AName=@p3
Zaten burada github üzerinde bir sorun oluşturdum: Kullanıcı tanımlı tablo yanlış değer ekleyerek
Parametreli sorgumda kullanıcı tanımlı bir tablo kullanmak istiyorum, bu soru bunun nasıl yapıldığını açıklar: Varlık Çerçevesi Saklı Yordam Tablo Değer Parametresi
Bu, yukarıdaki SQL kodunu almak için kullanılan C # kodudur
DataTable dataTable = new DataTable();
dataTable.Columns.Add("value1", typeof(decimal));
dataTable.Columns.Add("value2", typeof(decimal));
dataTable.Rows.Add(null,0.05m);
dataTable.Rows.Add(0.05m,0.1m);
dataTable.Rows.Add(null,0.01m);
dataTable.Rows.Add(0.01m,0.02m);
List<SqlParameter> Parameters = new List<SqlParameter>();
Parameters.Add(new SqlParameter("@AName", SqlDbType.Structured) { Value = dataTable , TypeName= "dbo.someUDT" });
dbContext.Database.ExecuteSqlCommand("Select * from @AName", Parameters.ToArray());
Ve kullanıcı tanımlı tablo almak için SQL kodu
CREATE TYPE [dbo].[someUDT] AS TABLE
(
[value1] [decimal](16, 5) NULL,
[value2] [decimal](16, 5) NULL
)
EDIT:
Gert Arnold anladı. Onun cevabına dayanarak burada mevcut bir rapor buldum SQL Server Profiler TextData Sütunu Ondalık Girdileri Yanlış İşliyor
Select * from @AName
yer tutucu olarak. Aslında bu zaten sorunu daha basit bir biçimde çoğaltır beri soru ile ilgili olduğunu düşünmüyordu daha büyük bir sorguda masaya katılıyorum.
Database.SqlQuery
(yerine Database.ExecuteSqlCommand
) kullandığımda istemcide doğru değerleri alıyorum!
dataTable.Rows.Add(null,0.05m);
ve hangi sorguyu oluşturduğunu kontrol edebilir misiniz