将C#DateTime的参数传递给SQL Server 2005?

odi*_*seh 5 c# datetime sql-server-2005

如何将C#DateTime值(FromCreateDateToCreateDate)传递给SQL Server 2005以便从视图中进行选择?

结果集CreateDate列必须位于FromDateDate和之间ToCreateDate.

cod*_*ger 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;
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 5

与任何其他参数完全相同...当然这取决于您如何进行数据访问,但如果我们假设SqlCommand您只是在TSQL中引用命名参数(@fromDate/ @toDate),并添加命名SqlParameters(with .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();
}
Run Code Online (Sandbox Code Playgroud)

使用LINQ等,您只需在查询中使用它,即

int count = db.Users.Count(user => user.LastSeen>=start && user.LastSeen<end);
Run Code Online (Sandbox Code Playgroud)

我在示例中使用了一个简单的计数来保持简单; 显然你也可以SELECT blah来自VIEW...