2012-06-15 7 views
0

У меня есть gridview и sqldatasource. В tabledefinition формат даты по умолчанию - mm: dd: yyyy, есть ли способ изменить формат на dd: mm: yyyy из настроек sql или что-то в этом роде.Формат базы данных базы данных SQL

У меня есть глобализация в виде нагрузки (для дд/мм/.yyyy), но когда я выбрать из источника данных некоторые значения между некоторыми датами:

string d1 = Convert.ToDateTime(date1.Text).ToString("dd.MM.yyyy"); 
string d2 = Convert.ToDateTime(date2.Text).ToString("dd.MM.yyyy"); 
SqlDataSource1.SelectCommand = "Select * FROM test WHERE Name = '"+name.Text+"' AND Date between '"+d1+"' AND '"+d2+"'"; 

Он работает только для mm/dd/yyyy.

Есть ли способ изменить его?

+0

Какой тип данных столбца Дата в SQL Server? это DateTime? – Habib

+0

Хорошей привычкой является использование формата даты ISO в ваших SQL-запросах, то есть YYYYMMDD – Elian

+0

Тип Дата и формат по умолчанию: mm/dd/yyyy – Jax

ответ

3

Его лучше, если вы можете использовать Parameters с запросом. Также, если ваш тип столбца - дата, то это лучше, если вы не преобразуете их в строку для сравнения. Попробуйте следующее

SqlDataSource1.SelectParameters.Add("@d1", date1); 
SqlDataSource1.SelectParameters.Add("@d2", date2); 
SqlDataSource1.SelectCommand = "Select * FROM test WHERE Name = '"+name.Text+"' AND Date between @d1 AND @d2"; 

также использовать параметры Имя

0
SqlDataSource1.SelectCommand= " SELECT [columns] FROM [table] WHERE Name = 
'"+name.Text+"' AND Date BETWEEN 
CONVERT(Date,'"+d1+"' , 105) AND CONVERT(Date,'"+d2+"', 105)" 

попробовать это ....

+0

не работал ... – Jax

1

Используйте параметризованные запросы, и все ваши проблемы исчезнут. :)

SqlDataSource1.SelectCommand = "Select * FROM test WHERE Name = @p_Name AND Date between @p_from AND @p_to"; 
SqlDataSource1.SelectCommand.Parameters.Add ("@p_Name", SqlDbType.String).Value = name.Text; 
SqlDataSource1.SelectCommand.Parameters.Add ("@p_from", SqlDbType.DateTime).Value = d1; 
SqlDataSource1.SelectCommand.Parameters.Add ("@p_to", SqlDbType.DateTime).Value = d2; 
+0

Не могли бы вы объяснить, пожалуйста? Спасибо – Jax

+0

Это то, что есть; вы определяете запрос с параметрами. Они действуют как «заполнители». Вы определяете, каковы параметры, какой тип данных они должны содержать, и присваивать ему значение. После этого все позаботятся о вас (форматы данных, цитаты и т. Д.). –

+0

благодарит за вашу помощь. – Jax

4

Избегайте ненужных преобразований обратно строки и использовать параметры:

DateTime d1 = Convert.ToDateTime(date1.Text); 
DateTime d2 = Convert.ToDateTime(date2.Text); 
SqlDataSource1.SelectCommand = "Select * FROM test WHERE Name = @name AND Date between @d1 AND @d2"; 
SqlDataSource1.SelectCommand.Parameters.AddParameterWithValue("@name", name.Text); 
SqlDataSource1.SelectCommand.Parameters.AddParameterWithValue("@d1", d1); 
SqlDataSource1.SelectCommand.Parameters.AddParameterWithValue("@d2", d2); 
+0

благодарит за вашу помощь. – Jax

1

Try использовать параметры:

SqlDataSource1.SelectCommand = "SELECT * FROM test WHERE Name = @Name AND Date between @DateLow AND @DateHigh"; 
SqlDataSource1.SelectParameters.Add("Name", name.Text); 
SqlDataSource1.SelectParameters.Add("DateLow", DbType.DateTime, d1); 
SqlDataSource1.SelectParameters.Add("DateHigh", DbType.DateTime, d2); 
+0

благодарит за помощь. – Jax

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