C# 日期时间SQL问题
我正在尝试让我的代码检查是否已经为今天的日期输入了一个数字。这是因为DocketNumber在整本书中重复出现,有点像抽奖券。我不希望同一个号码在同一天多次输入数据库 现在是我的代码C# 日期时间SQL问题,c#,sql,datetime,C#,Sql,Datetime,我正在尝试让我的代码检查是否已经为今天的日期输入了一个数字。这是因为DocketNumber在整本书中重复出现,有点像抽奖券。我不希望同一个号码在同一天多次输入数据库 现在是我的代码 string thisday = DateTime.Now.ToString("MM/dd/yyyy"); 那么支票呢 public void button11_Click(object sender, EventArgs e) { string thisday = DateTime.N
string thisday = DateTime.Now.ToString("MM/dd/yyyy");
那么支票呢
public void button11_Click(object sender, EventArgs e)
{
string thisday = DateTime.Now.ToString("MM/dd/yyyy");
errorProvider1.Clear();
Data.docnum = txtDisplay.Text;
if (txtDisplay.Text == "")
{
errorProvider1.SetError(txtDisplay, "Enter Docket Number");
return;
}
using (var db = new DocketsDataContext())
{
var docketCheck = from q in db.Dockets where q.Status== "Ca" select q;
string message = "";
foreach (var d in docketCheck)
{
message += String.Format(" DocketNum {0} - Status {1} - TimeRaised {2} - Thisday {3}\r\n", d.DocketNum, d.Status, d.TimeRaised, thisday);
}
MessageBox.Show(message);
var complete = from q in db.Dockets
where q.DocketNum == txtDisplay.Text && q.Status.Equals("CL") //&& q.TimeRaised.Contains(thisday)
select q;
var cancelcheck = from q in db.Dockets
where q.DocketNum == txtDisplay.Text && q.Status.Equals("Ca") && q.TimeRaised.Equals(thisday)
select q;
var docketcheck = from q in db.Dockets
where q.DocketNum == txtDisplay.Text && q.Status.Equals("O") //&& q.TimeRaised.Contains(thisday)
select q;
var statuscheck = from q in db.Dockets
where q.DocketNum == txtDisplay.Text && q.Status.Equals("Ea") //&& q.TimeRaised.Contains(thisday)
select q;
if (cancelcheck.Count() >= 1)
{
MessageBox.Show(@"Match Found");
txtDisplay.Clear();
txtDisplay.ReadOnly = false;
var cancel = new Cancel();
cancel.ShowDialog(this);
}
else if (complete.Count() >= 1)
{
txtDisplay.Clear();
txtDisplay.ReadOnly = false;
var cat = new Docerror();
cat.ShowDialog(this);
}
else if (statuscheck.Count() >= 1)
{
txtDisplay.Clear();
txtDisplay.ReadOnly = false;
var cat = new Category();
cat.ShowDialog(this);
}
else if (docketcheck.Count() >= 1)
{
txtDisplay.Clear();
txtDisplay.ReadOnly = false;
var engs = new EngStart();
engs.ShowDialog(this);
}
else
{
var sub = new machinesel();
txtDisplay.Clear();
sub.ShowDialog(this);
}
}
}
当这一天与今天的日期匹配时,它应该触发取消功能,但它不是;有什么想法吗
Jay在您的查询中,您可以这样做:
from q in db.Dockets
where q.DocketNum == txtDisplay.Text
&& q.Status.Equals("CL")
&& (q.TimeRaised - DateTime.Today).Hours >= 0
&& !(q.TimeRaised > DateTime.Today.AddDays(1))
select q;
不确定是否可以添加具有未来日期的记录,因此我添加了“DateTime.Today.AddDays(1)”
该逻辑基于比较两个日期返回的TimeSpan类:
TimeSpan ts = DateTime.Now - DateTime.Now.AddYears(-1);
Console.WriteLine(ts.Days);
这将给您365天的差异。您正在将一个
字符串
与一个日期时间
进行比较,该字符串永远不会返回true。
尝试使用以下方法:
var cancelCheck =
(from q in db.Dockets
where
q.DocketNum == txtDisplay.Text &&
q.Status.Equals("Ca") &&
q.TimeRaised.Date == DateTime.Now.Date
select q).Any();
另外,使用
Any()
而不是Count()>0
是否将日期作为字符串存储在数据库中?如果是,原因是什么?。如果将它们作为适当的类型(例如datetime)存储在数据库中,那么为什么要使用字符串呢?如果您需要没有时间组件的日期,只需使用DateTime.Today
。您是存储当天第一个条目的日期+时间,还是仅存储日期(如时间==0:00)?如果存储实时数据,则永远不会获得与.Today(其中时间=0:00)匹配的数据。我使用的是linq2sql如果这有帮助,表中的列是datetime。我需要存储计算时间跨度的时间,以分钟为单位,但我只想匹配取消检查部分的日期check@Jay-如果数据库中的TimeRaised
具有时间组件,对thisDay
变量所做的操作无关紧要-除了在午夜发生的事件,q.TimeRaised.Equals(thisDay)
将不为真。@Jay,顺便说一句,LINQ2SQL支持DateTime.Date
属性()。因此,您可以以x=>x.timerised.Date==lclDateVar
的形式编写谓词。