2010-10-19 70 views
5

Làm cách nào để chuyển các giá trị C# DateTime (FromCreateDateToCreateDate) vào SQL Server 2005 để chọn từ chế độ xem?Truyền tham số của C# DateTime sang SQL Server 2005?

Tập kết quả CreateDate cột phải nằm trong khoảng từ FromDateDate đến ToCreateDate.

+0

Vâng, Đó là ratherly một tình huống bối rối: Tôi muốn thực hiện một báo cáo trong một cách mà nếu người dùng của tôi đã nhập ngày cho FromCreateDate thì tôi so sánh nó với cột createDate, nếu không, thì tôi so sánh cột được tạo chỉ với giá trị ToCreateDate (tức là <= ToCreateDate) – odiseh

+1

thì bạn cần một cái gì đó như: 'WHERE createDate> = @ fromDate AND (@toDate IS NULL HOẶC createDate <= @toDate) '. –

Trả lời

5

Chính xác giống như bất kỳ thông số nào khác ... tất nhiên tùy thuộc vào cách bạn đang truy cập dữ liệu, nhưng nếu chúng tôi giả định một tham số được đặt tên là @fromDate/@toDate) trong TSQL, và thêm tên SqlParameter s (với .Value = theDate) để lệnh:

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

với LINQ vv bạn chỉ muốn sử dụng nó trong các truy vấn, ví dụ:

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

tôi đang sử dụng một đơn giản co trong các ví dụ chỉ để giữ cho nó đơn giản; rõ ràng là bạn có thể SELECT blah từ một VIEW vv quá ...

+0

@Mark: Tôi có phải gửi hai giá trị dưới dạng chuỗi và sau đó chuyển đổi chúng thành datetime trong thủ tục được lưu trữ không? – odiseh

+0

Không; chỉ cần đặt biến 'DateTime' của bạn vào' yourParameter.Value'. Tôi sẽ thêm một ví dụ ... –

8

Chỉ cần đặt kiểu tham số để SqlDbType.DateTime

ví dụ

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; 
Các vấn đề liên quan