我正在使用C#,MVC 4,SQL Azure。SQL Azure:在两个日期之间获取数据,日期为字符串
背景:我正在用DB编写一个网站,用户在网站上的每个动作都将作为用户活动保存在我的数据库中。
每一行,因为这些列:
- ID
- 日期
- 用户名
- 说明
现在到了我的问题,在我的国家,我们这样写日期: DD/MM/YYYY
示例:29/11/2014
。
奇怪我知道,但我需要这种格式。
我尝试了一千种方法将INSERT
日期值转换成我的数据库(SQL Azure),它们的格式不同,而且没有任何东西可以工作,而且微软在那里得到了3种类型的Date,它非常非常混乱,所以我也只是设置日期字段作为一个字符串,我组装这样的日期:
string date = DateTime.Now.Day.ToString() + "/"
+ DateTime.Now.Month.ToString() + "/"
+ DateTime.Now.Year.ToString() + " "
+ DateTime.Now.Hour.ToString() + ":"
+ DateTime.Now.Minute.ToString();
现在我想与查询使用两个日期“之间”这样的数据:
SELECT [ID]
,[Date]
,[User]
,[Description]
FROM [dbo].[ActivityLog]
WHERE [Date] BETWEEN 03/09/2014 AND 04/09/2014;
我得到这个错误:
将nvarchar值'3/9/2014 21:3'转换为数据类型int时转换失败。
我的日期看起来像这样的DB:
3/9/2014 21:3
如果有人能指导我这个槽......谢谢
这是我的代码:
public static void UpdateLog(string userName, string description)
{
try
{
string guid = Guid.NewGuid().ToString();
string date = DateTime.Now.Day.ToString() + "/" + DateTime.Now.Month.ToString() + "/" + DateTime.Now.Year.ToString() + " " + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString();
string query = "INSERT INTO ActivityLog VALUES('" + guid + "' , '" + date + "' , '" + userName + "' , '" + description + "')";
AdoHelper.ExecuteNonQuery(query);
}
catch (Exception ex)
{
throw ex;
}
}
更新:
我改变了我的代码如下:
string query = "INSERT INTO ActivityLog VALUES('" + guid + "' , '" + DateTime.Now + "' , '" + userName + "' , '" + description + "')";
现在,当我看着我的数据库我看到这一点:
03-Sep-14
酷似我的电脑是在右下角写(托盘图标那里)。
但是,这是一个问题,因为其他人进入网站,并在他的计算机上他写的日期不同,所以他会插入数据库不同的格式,我能做些什么来解决这个问题?世界标准时间 ?
我会建议做一些文化和字符串格式的研究:http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx和http:// msdn .microsoft.com/en-us/library/vstudio/bz9tc508(v = vs.100).aspx – 2014-09-03 18:50:24
不要将日期转换为字符串。而是将日期作为参数传递给查询。显示你的代码,我可以告诉你如何去做。 – 2014-09-03 18:54:18
'将nvarchar值'3/9/2014 21:3'转换为数据类型int.'时转换失败。日期字段的数据类型是什么。错误消息告诉你它期望一个int,因为日期是在数据库中定义为'TimeStamp'的日期。 – MethodMan 2014-09-03 18:54:44