0

我有一个gridview 和sqldatasource。在 tabledefinition 中,日期的默认格式是 mm:dd:yyyy ,有没有办法从 sql 设置或类似的东西将格式更改为 dd:mm:yyyy 。

我在表单加载中有全球化(对于 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.

有没有办法改变它?

4

5 回答 5

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);
于 2012-06-15T07:13:59.830 回答
3

如果您可以在查询中使用参数,那就更好了。此外,如果您的列类型是日期,那么最好不要将它们转换为字符串进行比较。尝试以下

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";

还使用名称参数

于 2012-06-15T07:16:40.120 回答
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);
于 2012-06-15T07:17:44.663 回答
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;
于 2012-06-15T07:12:36.930 回答
0
SqlDataSource1.SelectCommand= " SELECT [columns] FROM [table] WHERE Name =   
'"+name.Text+"' AND Date BETWEEN  
CONVERT(Date,'"+d1+"' , 105)  AND CONVERT(Date,'"+d2+"', 105)"

尝试这个....

于 2012-06-15T07:09:28.143 回答