2014-02-19 5 views
2

Я вызываю хранимую процедуру на сервере sql db, который принимает параметры Date, где d1, d2 - тип C# DateTime. Я использую рамку сущности сделать так:Параметр даты с использованием хранимой процедуры Entity Framework

context.Database.ExecuteSqlCommand("myprocedure @p1 @p2",dt1.Date,dt2.Date) 

Он не дал результатов, так что я пробовал:

var p0 = new SqlParameter("p0",dt1); 
p0.SqlDbType = SqlDbType.Date; 
var p1= new SqlParameter("p1", dt2); 
p1.SqlDbType = SqlDbType.Date; 
context.Database.ExecuteSqlCommand("myprocedure @p1 @p2",p0,p1) 

Тем не менее, если я просто сделать:

context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", '1/20/2014', '1/30/2014') 

Я получаю правильный результат. Пожалуйста, помогите ... выйдя из головы.

ответ

0

Ваши даты также включают время. Для того, чтобы сделать именно это:

context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", '1/20/2014', '1/30/2014') 

Вы должны сделать это:

context.Database.ExecuteSqlCommand("myprocedure @p1 @p2",dt1.Date.ToShortDateString() , dt2.Date.ToShortDateString()) 

Это потому, что я предполагаю, что ваш SP принимает строки в отличие от типов DateTime.

Обратите внимание, что форматирование дателей зависит от культуры. Вы можете вручную указать формат MM/dd/YYYY и т. Д. С помощью метода .ToString(), чтобы гарантировать, что SP получит правильную дату форматирования.


Также не похоже, что вы правильно используете структуру объектов. Должен быть метод MyProcedure на объекте инфраструктуры сущности, который вы можете вызвать напрямую и передать параметры.

-1

Попробуйте Преобразование DT1 и dt2 первый, перед тем отправить значение параметров

dt1= Convert.ToDateTime(DateTime.Now.ToString("MM/dd/YYYY"); 
dt2= Convert.ToDateTime(DateTime.Now.ToString("MM/dd/YYYY"); 
+0

Если вы хотите, чтобы получить дату часть значения DateTime, вызовите 'свойство .Date'. Ваш код действительно провалится, потому что вы используете локализованный формат (только для США), а не однозначный 'yyyy-MM-dd'. –

+0

@PanagiotisKanavos u может изменить формат от MM/dd/YYYY до любого формата, который вам нужен ... почему вы делаете проблему более сложной? ... lol – cyan

+0

Даты не имеют форматов. Это двоичные значения. На самом деле, это множественные преобразования без учета локали, которые делают вещи намного сложнее. –

-1

Проблема: Формат вы предоставляете не то, что именно DB ожидает.

всегда лучше преобразовать вашу строку в DateTime и отправить ее.

Заменить Это:

context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", '1/20/2014', '1/30/2014') 

с этим:

DateTime dt1=DateTime.ParseExact("1/20/2014","M/d/yyyy",CultureInfo.InvariantCulture); 
DateTime dt1=DateTime.ParseExact("1/30/2014","M/d/yyyy",CultureInfo.InvariantCulture); 
context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", dt1,dt2); 
+0

OP уже пытался использовать значения DateTime. Это не удалось, поскольку хранимая процедура принимает строковые параметры вместо параметров даты –

Смежные вопросы