2012-06-15 69 views
0

我有一个gridview和sqldatasource。 在tabledefinition中,日期的默认格式是mm:dd:yyyy,有什么方法可以将格式更改为dd:mm:yyyy从sql设置或类似的东西。SQL数据库日期格式

我有全球化的形式负载(DD/MM/.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

一个很好的习惯是在你的SQL查询中使用ISO日期格式,例如YYYYMMDD – Elian

+0

类型为Date,默认格式为: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

尝试使用参数参数:

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