2013-12-10 170 views
0

我在文本框中捕获时间(通过使用AJAX日历扩展器) 字符串中的时间为12/10/2013,但是当我将字符串分配给日期时间对象时,它是转换为12/10/2013 12:00:00 AM如何从日期时间对象获取短日期格式

我想使用日期来使用下面的查询过滤数据库中的记录。请帮助

string date1 = txtDate1.Text; 

DateTime date = DateTime.ParseExact(txtDate1.Text, "MM/dd/yyyy", 

System.Globalization.CultureInfo.InvariantCulture); 
string strQuery = "SELECT Story.UserName,Story.StoryId,COUNT(Likes.StoryID) AS   NumberOfOrders 
FROM Likes LEFT JOIN Story ON Likes.StoryId=Story.StoryId and liked=" + date1 + " 
GROUP BY Story.StoryId,Story.UserName order by NumberOfOrders DESC ;"; 
+0

数据库中“喜欢”列的类型是什么? – user3041160

+0

你为什么要说'likes =“+ date1'而不是'likes =”+ date'?你知道日期是你解析的变量吗?另外,你是否尝试过使用参数化SQL,它通常可以让你像这样跳过无聊的字符串转换。 – Tobberoth

+0

这里使用的* date *在哪里?第二行的目的是什么? –

回答

0

可以使用Date对象代替DateTime对象。

DateTime是一个解释为表示DateTime的两个部分(即:日期和时间)的整数。您将始终在DateTime中同时具有日期和时间。

例如:

DateTime.Now.ToString("MM/dd/yyyy"); 
2

它一般不通过日期为字符串在查询中,因为你很可能会碰上格式问题是一个好主意 - 把它留给你正在使用决定的框架是什么最好的格式是。

在您的情况下,您可以使用SqlParameter(例如,

DateTime date = DateTime.ParseExact(txtDate1.Text, "MM/dd/yyyy", CultureInfo.InvariantCulture); 
string strQuery = "SELECT Story.UserName, Story.StoryId, COUNT(Likes.StoryID) AS NumberOfOrders 
    FROM Likes LEFT JOIN Story ON Likes.StoryId=Story.StoryId and [email protected] 
    GROUP BY Story.StoryId,Story.UserName order by NumberOfOrders DESC"; 

using (SqlConnection connection = new SqlConnection("...")) 
{ 
    using (SqlCommand cmd = new SqlCommand(strQuery, connection)) 
    { 
     cmd.Parameters.AddWithValue("@dateTime", date); 
     connection.Open(); 
     SqlDataReader reader = cmd.ExecuteReader(); 
     ... 
    } 
} 

使用参数时,撰写原始SQL是要确保你的用户输入正确sanatized,安全地传递到DB的另一个重要原因。如果不这样做,可能会导致您开放各种漏洞,如SQL Injection

相关问题