【问题标题】:Get data using Date and Time from sql in C#在 C# 中使用日期和时间从 sql 获取数据
【发布时间】:2018-02-23 16:34:52
【问题描述】:

我有一个简单的控制台应用程序,该应用程序从 SQL 服务器获取数据。我必须使用 SQL 服务器中的日期和时间来搜索数据。如果我只输入年份,则下面的代码有效,例如如果我输入20172018,那么它会获取当年的所有数据,但如果我尝试输入2017-07-22,那么它不会得到任何数据.我的 SQL 服务器的日期格式为 year-month-day hh-mm-ss。我有点卡在这里。有什么建议?

using (var context = new Model1())
{
    Console.WriteLine("Enter Date");
    DateTime dateTime;
    var s = dateTime.ToShortDateString();
    s = Console.ReadLine();

    var result = context.Databases.
        Where(x => x.RecordedTime.Value.ToString().
        Contains(s)).ToList(); ;

    foreach (var item in result)
    {
        Console.WriteLine($"{item.RecordedTime.Value.ToShortDateString()}, {item.Temperature}");
    }

}

【问题讨论】:

  • 整个方法毫无意义。您创建一个日期时间(具有其默认值),将其转换为字符串并将其分配给s,然后您将用户输入完全覆盖s
  • 您应该做的只是接受用户输入,使用DateTime.TryParse() 将该字符串解析为日期,然后使用带有实际日期而不是字符串比较的 LINQ。
  • 同意@maccettura。无需使用字符串。如图所示,将来自用户的数据解析为Date 变量,然后使用该变量进行比较。
  • 我也尝试过使用 TryParse,但如果我只输入日期而不是完整日期,它也会返回数据
  • 在 TryParseExact 上查看答案。另外,为了您自己的理智,不要在字符串中使用括号内的方法,只需生成您想要的字符串,然后使用字符串连接插入它。

标签: c# sql visual-studio entity-framework linq


【解决方案1】:

你不需要转换成字符串,你只需要解析它。要使用精确的格式进行解析,您可以使用 DateTime.TryParseExact,根据您提供的格式:

s = Console.ReadLine();

DateTime dt;
DateTime.TryParseExact(s, 
    "yyyy-MM-dd HH-mm-ss", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None, 
    out dt);

//... do linq stuff with variable dt

【讨论】:

  • 使用此解决方案,它与年份完美配合,但当我输入完整日期时却不行。当我输入 2017-07-22 时,它不显示任何内容。但它显示我只进入 2017 年。
  • @user3280146 - 查看各种解析方法。 TryParseExact 就是其中之一。它有很多选择。 ParseExactParseTryParse 是其他的。您必须根据您希望用户做什么来做出一些决定。
  • @Guilherme - 请注意,如果您使用hh,您还需要提供tt。或者使用HH。否则无法提供中午之后的时间。
  • @user3280146,我发布的这个例子应该使用你提供的格式:yyyy-MM-dd HH-mm-ss,你试过像2017-11-01 09-10-10这样的输入吗?
  • 谢谢大家的帮助,我解决了这个问题。
猜你喜欢
  • 2022-06-14
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 2011-12-13
相关资源
最近更新 更多