2010-10-19 3 views
5

Comment puis-je transmettre les valeurs C# DateTime (FromCreateDate et ToCreateDate) à SQL Server 2005 afin de sélectionner dans une vue? La colonne CreateDate du jeu de résultats doit être comprise entre FromDateDate et ToCreateDate.Passer le paramètre de C# DateTime à SQL Server 2005?

+0

Eh bien, il est ratherly une situation perplexe: Je voudrais faire un rapport d'une manière que si mon utilisateur a entré une date pour FromCreateDate alors je la compare à la colonne createDate, sinon, je compare la colonne créée seulement avec la valeur ToCreateDate (ie <= ToCreateDate) – odiseh

+1

alors vous avez besoin de quelque chose comme: 'WHERE createDate> = @ fromDate AND (@toDate IS NULL OU createDate <= @toDate) '. –

Répondre

5

Exactement la même chose que vous le feriez pour tout autre paramètre ... Bien sûr, il dépend de la façon dont vous faites vos données d'accès, mais si l'on suppose un SqlCommand que vous souhaitez simplement référence à un paramètre nommé (@fromDate/@toDate) dans le TSQL et ajoutez nommé SqlParameter s (avec .Value = theDate) à la commande:

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

avec LINQ etc vous souhaitez simplement l'utiliser dans la requête, à savoir

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

J'utilise un co simple unt dans les exemples juste pour le garder simple; Évidemment, vous pouvez SELECT blah d'un VIEW etc aussi ...

+0

@Mark: Dois-je envoyer deux valeurs sous forme de chaîne, puis les convertir en date et heure dans la procédure stockée? – odiseh

+0

Non; il suffit de définir vos variables 'DateTime' dans' yourParameter.Value'. Je vais ajouter un exemple ... –

8

Il suffit de définir le type de paramètre à SqlDbType.DateTime

par exemple

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; 
Questions connexes