c# - 插入、选择和更新日期时间

标签 c# sql sql-server t-sql ado.net

我有一个包含时间的表,列名为 time,数据类型为 Date

在 asp.net 中,我想要一个查询插入日期,另一个查询则在 2 个日期之间进行选择。

我已经尝试过这个:

string data = DateTime.Now.ToShortDateString(); //date= 28/10/2014 -> dd/mm/yyyy
string comando = "INSERT INTO example (date) values '" +data+ "+"'";

我使用该查询在 2 个日期之间进行选择

select * 
from example 
where date >= '25/10/2014' and date <= '28/10/2014'

我已经尝试使用数据类型 varchar 但它不起作用。所以我尝试使用数据类型date

但是当我执行查询INSERT时,我收到错误

Conversion failed when converting date and/or time from character string.

有人可以帮助我吗?我唯一的问题是将时间保存到表中。

如果可能的话,我想要这样的日期格式:dd/mm/yyyy

更新:

我在更新具有日期(日期)和 varchar(名称)的行时遇到问题 这是我的代码:

string comando = "UPDATE example set name=@name WHERE data = @date";
SqlCommand cmd = new SqlCommand(comando, connect);
cmd.Parameters.Add("@name", nome);
cmd.Parameters.Add("@date", SqlDbType.Date).Value = data;
cmd.ExecuteNonQuery();

消息错误是:“字符串或二进制数据将被截断。 该声明已终止。”

最佳答案

您应该永远像您一样将您的 SQL 命令连接在一起!这使它们容易受到 SQL 注入(inject)攻击。

相反 - 使用参数!这也消除了很多转换问题。

所以在你的情况下,你应该使用:

string comando = "INSERT INTO example (date) VALUES (@DateParam)";

然后您需要在SqlCommand上设置@DateParam:

cmd.Parameters.Add("@DateParam", SqlDbType.Date).Value = YourDataValueHere

这应该可以解决您的所有问题!

如果您想再次选择 -,使用参数!

select * 
from example 
where date >= @fromDate and date <= @toDate

当您从 C# 运行此代码时。

如果您直接使用 T-SQL(在 Mgmt Studio 中),则使用 ISO-8601 格式 YYYYMMDD,该格式独立于任何日期格式和/或语言设置 -

select * 
from example 
where date >= '20141025' and date <= '20141028'

这适用于任何版本的 SQL Server 以及任何日期格式、语言和区域设置。

关于c# - 插入、选择和更新日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26618662/

相关文章:

c# - 数据绑定(bind)主窗口的标题以查看模型的属性

c# - 我应该如何正确反序列化这个对象?

mysql - 连接 4 个表导致空结果

sql - 哈希主键postgresql

sql - 在什么情况下这两个 SQL 查询会给出不同的结果?

c# - 为什么 Point.Offset() 没有在只读结构中给出编译器错误?

c# - 由于流程,应用程序保持打开状态

MySQL连接水平与垂直表

SQL Server 多个表的外键

sql - 在 SQL 中将行更改为列