2010-10-19 18 views
5

¿Cómo paso los valores de C# DateTime (FromCreateDate y ToCreateDate) a SQL Server 2005 para seleccionar una vista?Pasando el parámetro de C# DateTime a SQL Server 2005?

el conjunto de resultados CreateDate columna debe estar entre FromDateDate y ToCreateDate.

+0

bueno, es ratherly una situación de desconcierto: Me gustaría hacer un informe en de forma que si mi usuario ingresó una fecha para FromCreateDate, entonces lo comparo con la columna createDate; si no, comparo la columna createdate solo con el valor ToCreateDate (es decir, <= ToCreateDate) – odiseh

+1

, entonces necesita algo como: 'WHERE createDate> = @ fromDate AND (@toDate IS NULL O createDate <= @toDate) '. –

Respuesta

5

Exactamente lo mismo que lo haría con cualquier otro parámetro ... por supuesto que depende de lo que está haciendo sus datos de acceso, pero si suponemos una SqlCommand que acababas referencia a un parámetro llamado (@fromDate/@toDate) en el TSQL, y añadir nombrado SqlParameter s (con .Value = theDate) al comando:

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(); 
} 

con LINQ, etc que le acaba de utilizar en la consulta, es decir

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

estoy usando una simple co unt en los ejemplos solo para mantenerlo simple; Obviamente se puede SELECT blah de un etc ... VIEW demasiado

+0

@Mark: ¿Debo enviar dos valores como cadena y luego convertirlos a fecha y hora en el procedimiento almacenado? – odiseh

+0

No; simplemente configure sus variables 'DateTime' en' yourParameter.Value'. Añadiré un ejemplo ... –

8

Sólo hay que establecer el tipo de parámetro a SqlDbType.DateTime

por ejemplo

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; 
Cuestiones relacionadas