[英]How do I convert DateTime into string?
我有一個方法需要3個字符串,所以:
public <List> MethodName(string date1, string date2, string number)
{
//
}
在我的數據庫中date1
和date2
存儲為DateTime
,數字存儲為Int
所以我將如何編寫一個基於這三個參數進行搜索的SQL查詢?
我已經像這樣轉換了date1
和date2
:
DateTime firstdate = Convert.ToDateTime(date1);
string fdate = firstdate.ToLongDateString();
DateTime seconddate = Convert.ToDateTime(date1);
string sdate = seconddate .ToLongDateString();
我的SQL查詢是:
SELECT * From TableName
WHERE [Time] > @date1 AND
[Time] < @date2 AND [StaffCode] =@StaffCode;
command.Parameters.AddWithValue("@date1", fdate);
command.Parameters.AddWithValue("@date2", sdate );
command.Parameters.AddWithValue("@StaffCode", number);
conn.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{ get the data ...}
我確定我的SQL查詢錯誤。
由於數據庫列已被強類型化,因此在將它們綁定到查詢之前,只需確保將C#參數分別鍵入為System.DateTime
和int
( System.Int32
)。 然后,您的sql很簡單:
SELECT col1, col2, col3
FROM TableName
WHERE [Time] > @date1 AND
[Time] < @date2 AND [StaffCode] =@StaffCode;
如果允許包含日期,則可以使用BETWEEN,即
WHERE [Time] BETWEEN @date1 AND @date2
AND [StaffCode] = @StaffCode
即避免完全將Date轉換為字符串 。 盡可能嘗試在整個代碼(包括C#和SQL)中始終保持強大的類型系統-這將在轉換過程中省去很多麻煩。 例如,如果可能,請查看是否可以將簽名更改為:
public List<MethodName>(DateTime date1, DateTime date2, int number)
{
// Bind the DateTimes, not a string!
command.Parameters.AddWithValue("@date1", date1);
command.Parameters.AddWithValue("@date2", date2);
command.Parameters.AddWithValue("@StaffCode", number);
編輯不要使用SELECT *
-使用SELECT Col1, Col2, ...
轉換:
DateTime firstdate = Convert.ToDateTime(date1);
string fdate = firstdate.ToString("yyyy-MM-dd");
DateTime firstdate2 = Convert.ToDateTime(date2);
string fdate2 = firstdate2.ToString("yyyy-MM-dd");
SQL查詢:
@"SELECT * From TestTable WHERE Time BETWEEN CONVERT(Date,@date1) AND CONVERT(Date,@date2) AND StaffCode=CONVERT(int,@StaffCode)"
command.Parameters.AddWithValue("@date1", fdate);
command.Parameters.AddWithValue("@date2", fdate2);
command.Parameters.AddWithValue("@StaffCode", number);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.