2012-06-15 72 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