2010-10-19 62 views
5

如何將C#DateTime值(FromCreateDateToCreateDate)傳遞給SQL Server 2005以便從視圖中進行選擇?將C#DateTime的參數傳遞給SQL Server 2005?

結果集CreateDate列必須在FromDateDateToCreateDate之間。

+0

嗯,這是ratherly不解的情況:我想作一個報告一種方式,如果我的用戶輸入的FromCreateDate的日期,然後我比較它createDate列,如果沒有,那麼我比較創建列只與ToCreateDate值(即<= ToCreateDate) – odiseh 2010-10-19 07:40:00

+1

然後你需要像這樣:'WHERE createDate> = @ fromDate AND(@toDate IS NULL OR createDate <= @toDate)'。 – 2010-10-19 08:55:00

回答

5

完全一樣的,就像任何其他參數...當然這取決於你如何做你的數據訪問,但如果我們假設一個SqlCommand你只引用一個命名參數(@fromDate/@toDate)在TSQL,並添加一個名爲SqlParameter S(與.Value = theDate)的命令:

DateTime end = DateTime.Today, start = end.AddDays(-7); // the last week 
using (var conn = new SqlConnection(connectionString)) 
using (var cmd = conn.CreateCommand()) 
{ 
    conn.Open(); 
    cmd.Parameters.AddWithValue("@from", start); // fine for DateTime; for strings, use more explicit param 
    cmd.Parameters.AddWithValue("@to", end); // construction to avoid lots of different-length plans 
    cmd.CommandText = "SELECT COUNT(1) FROM [Users] WHERE LastSeen >= @from AND LastSeen < @to"; 
    int count = (int) cmd.ExecuteScalar(); 
} 

使用LINQ等等你只是用它在查詢中,即

int count = db.Users.Count(user => user.LastSeen>=start && user.LastSeen<end); 

我使用的是簡單公司爲了保持簡單,在示例中不要使用它;很明顯,你可以SELECT blahVIEW等太...

+0

@Mark:我必須發送兩個值作爲字符串,然後將它們轉換爲存儲過程中的日期時間? – odiseh 2010-10-19 07:31:26

+0

否;只需將你的'DateTime'變量設置爲'yourParameter.Value'。我會添加一個例子... – 2010-10-19 07:33:50

8

只需設置參數類型SqlDbType.DateTime

SqlCommand cmd = new SqlCommand("Select * From dbo.MyView Where createDate = @FromDate", SqlCon); 
cmd.Parameters.Add(new SqlParameter(@FromDate, SqlDbType.DateTime)); 
cmd.Parameters["@FromDate"].Value = fromDate;