2010-10-19 64 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;