¿Cómo pasar datetime de c # a sql correctamente?

Tengo una tabla y los horarios en ella están en el formatting:

2011-07-01 15:17:33.357 

Estoy tomando ac # DateTime cuando hago un .ToString () en el object Obtengo un DateTime en el formatting:

 04/07/2011 06:06:17 

Me pregunto cómo paso correctamente el DateTime correcto porque cuando ejecuto el SQL que está en nuestro código no funciona (es decir, selecciona el DateTime correcto). No puedo usar SQL profiler.

Este es el código:

 //looks to if a user has had any activity in within the last time specified public bool IsUserActivitySinceSuppliedTime(int userId, DateTime since) { //get everything since the datetime specified [usually 5 hours as this is //how long the session lasts for string sql = "SELECT * FROM tbl_webLogging WHERE userid = @userid AND DateAdded > @sinceDateTime"; SqlParameter sinceDateTimeParam = new SqlParameter("@sinceDateTime", SqlDbType.DateTime); sinceDateTimeParam.Value = since; SqlCommand command = new SqlCommand(sql); command.Parameters.AddWithValue("@userid", userId); command.Parameters.Add(sinceDateTimeParam); using (SqlDataReader DataReader = GetDataReader(command)) { if (DataReader.HasRows) { return true; } else { return false; } } } 

ACTUALIZAR*******************

He ejecutado lo siguiente en los datos:

 SELECT * FROM tbl_webLogging WHERE userid = 1 AND DateAdded > '2011-07-01 07:19:58.000' 

Y

 SELECT * FROM tbl_webLogging WHERE userid = 1 AND DateAdded > '04/07/2011 07:19:58' 

Uno devuelve 53 loggings, el otro devuelve 69 loggings. ¿Cómo puede ser esto? Y cuando paso el DateTime (04/07/2011 07:19:58) de c # a SQL ¡no aparecen los loggings!

Ya lo ha hecho correctamente utilizando un parámetro DateTime con el valor de DateTime , por lo que ya debería funcionar. Olvídate de ToString() , ya que no se usa aquí.

Si hay una diferencia, es más probable que lo haga con una precisión diferente entre los dos entornos; tal vez elija un networkingondeo (¿segundos, quizás?) y use eso. También tenga en count UTC / local / unknown (el DB no tiene ningún concepto del "tipo" de date; .NET sí).

Tengo una tabla y los horarios están en el formatting: 2011-07-01 15:17:33.357

Tenga en count que las dates de la database no están en ningún formatting; ese es solo su cliente de consulta que le muestra mentiras blancas. Se almacena como un número (e incluso eso es un detalle de implementación), porque los humanos tienen esta extraña tendencia a no darse count de que la date que has mostrado es la misma que 40723.6371916281 . Humanos estúpidos. Al tratarlo simplemente como un "datetime" en todo momento, no debería tener ningún problema.

Tuve muchos problemas relacionados con C # y SqlServer. Terminé haciendo lo siguiente:

  1. En SQL Server utilizo el tipo de columna DateTime
  2. En c # utilizo el método .ToString ("aaaa-MM-dd hh: mm: ss")

También asegúrese de que todas sus máquinas funcionen en la misma zona horaria.

En cuanto a los diferentes sets de resultados que obtienes, tu primer ejemplo es "Primero de julio", mientras que el segundo es "4 de julio"

Además, el segundo ejemplo también se puede interpretar como "7 de abril", depende de la configuration de localización del server (mi solución no sufre este problema).