Reputation: 997
I have a gridview and sqldatasource. In tabledefinition the default format for date is mm:dd:yyyy , is there any way of changing the format to dd:mm:yyyy from sql settings or something like that.
I have globalization in form load(for dd/mm/.yyyy) but when I'm selecting from datasource some values between some dates :
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+"'";
It works only for mm/dd/yyyy
.
Is there any way to change it?
Upvotes: 0
Views: 2309
Reputation: 5367
Try to use parameters:
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);
Upvotes: 1
Reputation: 223402
Its better if you can use Parameters with the query. Also if your column type is Date, then its better if you don't convert them to string for the comparison. Try the following
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";
Also use parameters for Name
Upvotes: 3
Reputation: 30628
Avoid the unnecessary conversions back to string and use parameters:
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);
Upvotes: 4
Reputation: 56964
Use a parametrized query, and all your problems will disappear. :)
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;
Upvotes: 1
Reputation: 443
SqlDataSource1.SelectCommand= " SELECT [columns] FROM [table] WHERE Name =
'"+name.Text+"' AND Date BETWEEN
CONVERT(Date,'"+d1+"' , 105) AND CONVERT(Date,'"+d2+"', 105)"
try this....
Upvotes: 0