2013-03-22 6 views
0

У меня есть сборщик дат JQuery, который помещает дату в текстовое поле в формате DD/MM/YYYY.Преобразование даты Великобритании в формат American

Я пытаюсь сохранить это в SQL Server 2008, который должен принять дату как MM/DD/YYYY, как мне отформатировать дату, чтобы заставить это работать правильно?

Это код, чтобы добавить свой параметр в запрос, который вызывает ошибку, как день и месяц это неправильный путь круглого

TextBox fixtureDateTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMenu").FindControl("datepicker"); 
SqlParameter fixtureDateParam = new SqlParameter("@fixtureDate", fixtureDateTextBox.Text); 
+0

Проверьте это, должно быть то, что вы ищете. http://stackoverflow.com/a/15547264/2171266 –

+1

Мэтт ищет с помощью метода 'SqlParameters.AddWithValue()', который против SqlParameter также передает значения вашим параметрам в качестве переменных, которые не являются четким или жестко закодированным текстом 'Avoind SQL Injection' – MethodMan

ответ

4

Никогда, когда-либо непосредственно вставить введенный текст в как вы это делаете - это основная причина слишком многих уязвимостей и явлений безопасности. Сначала проанализируйте ввод в объекте DateTimeOffset (вы также можете использовать DateTime, но лучше всего использовать смещение), вызывая DateTimeOffset.Parse(...), тогда вы можете просто добавить его в качестве параметра, не изменяя его.

EDIT: Я перечитал ваш вопрос и понял, что, хотя выше не является неправильным, он пропускает некоторые важные вещи, которые затрагивают ваш вопрос. См this как конфигурировать выбор даты для отображения альтернативного формата дата от того, что он хранит в альтернативном поле:

EDIT 2: Вы хотите разобрать ваш DateTime объект, используя перегрузку, которая позволяет передавать в пример IFormatProvider. См. http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx для примера того, как делать то, что вы хотите сделать. В противном случае DateTime.Parse('13/3/2013') завершит сбой из-за непризнанного формата.

DateTime.Parse('13/3/2013', new CultureInfo("en-GB").DateTimeFormat) - это то, что вы хотите сделать с полем ввода.

0

Попробуйте это:

TextBox fixtureDateTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMenu").FindControl("datepicker"); 
DateTime date = DateTime.Parse(fixtureDateTextBox.Text); 
SqlParameter fixtureDateParam = new SqlParameter("@fixtureDate", date); 
+0

, который не сработает, если ваша CultureInfo - это что-то вроде «en-UK» (или информация о культуре, которая следует за этим соглашением формата даты календаря) –

2

Я согласен с другими людьми, что вы должны быть в состоянии настроить формат сборщика JQuery для начала, но если вы не можете, это должен сделать трюк:

TextBox fixtureDateTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMenu").FindControl("datepicker"); 
DateTime fixtureDate = DateTime.Parse(fixtureDateTextBox.Text, new CultureInfo("en-GB")); 
SqlParameter fixtureDateParam = new SqlParameter("@fixtureDate", fixtureDate.ToString(new CultureInfo("en-US")); 
+1

ваш - это надежное решение, поскольку оно не предполагает ничего о CurrentUICulture при вызове ToString on это дата –

0

Добавить в разделе пространств имен: using System.Globalization;

затем разобрать дату ввода следующим образом:

string DB_Date = (DateTime.Parse(fixtureDateTextBox.Text)).ToString(new CultureInfo("en-US")); 
+0

Это будет по-прежнему сбой, если CurrentCulture не поддерживает стиль формата даты –

-1
DateTime UKDate = Convert.ToDateTime(datepicker.Text);<br> 
    string usDate= UKDate.ToString("dd-MM-yyyy");<br> 
    SqlParameter fixtureDateParam = new SqlParameter("@fixtureDate", usDate); 
Смежные вопросы