C# 获取基于日期时间的值
我希望实现以下目标:- 1-从数据库中获取具有当前日期的记录。 2-如果数据库没有今天的记录,我希望它能从前一天得到。 3-如果前一天没有任何记录,我希望它能从前一天获得这些记录,以此类推C# 获取基于日期时间的值,c#,asp.net,sql,database,C#,Asp.net,Sql,Database,我希望实现以下目标:- 1-从数据库中获取具有当前日期的记录。 2-如果数据库没有今天的记录,我希望它能从前一天得到。 3-如果前一天没有任何记录,我希望它能从前一天获得这些记录,以此类推 try { string date = DateTime.Now.ToShortDateString(); conn.Open(); //string str = "insert into Table1 (title , date_ ,www, cat)
try
{
string date = DateTime.Now.ToShortDateString();
conn.Open();
//string str = "insert into Table1 (title , date_ ,www, cat) values (' " + TextBox1.Text + "','" + DateTime.Now.ToShortDateString() + "','" + TextBox2.Text + "','" + DropDownList1.SelectedItem.Text + "')";
////string str = "INSERT INTO Table1 (title,date_,www ) values ('ddddddd','aaaaaaa','qqqqqq')";
string str =
//"SELECT from table1 WHERE cat = 1 and datee='" + date + "'ORDER BY datee";
"SELECT * FROM table1 WHERE cat = 1 and datee = @dt ORDER BY datee DESC ";
SqlCommand objcmd = new SqlCommand(str, conn);
objcmd.Parameters.AddWithValue("@dt", date);
SqlDataAdapter da1 = new SqlDataAdapter(objcmd);
DataTable dt = new DataTable();
da1.Fill(dt);
//DataRow dr = new DataRow();
//DataRow dr = ds.Tables[0].Rows[0];
int id = 1;
foreach (DataRow dr in dt.Rows)
{
if (id == 1)
{
ll1.Text = dr[1].ToString();
l1.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 2)
{
ll2.Text = dr[1].ToString();
l2.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 3)
{
ll3.Text = dr[1].ToString();
l3.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 4)
{
ll4.Text = dr[1].ToString();
l4.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 5)
{
ll5.Text = dr[1].ToString();
l5.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 6)
{
ll6.Text = dr[1].ToString();
l6.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 7)
{
ll7.Text = dr[1].ToString();
l7.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 8)
{
ll8.Text = dr[1].ToString();
l8.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 9)
{
ll9.Text = dr[1].ToString();
l9.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 10)
{
ll10.Text = dr[1].ToString();
l10.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 11)
{
ll11.Text = dr[1].ToString();
l11.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 12)
{
ll12.Text = dr[1].ToString();
l12.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 13)
{
ll13.Text = dr[1].ToString();
l13.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 14)
{
ll14.Text = dr[1].ToString();
l14.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 15)
{
ll15.Text = dr[1].ToString();
l16.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 16)
{
ll16.Text = dr[1].ToString();
l16.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 17)
{
ll17.Text = dr[1].ToString();
l17.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 18)
{
ll18.Text = dr[1].ToString();
l18.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 19)
{
ll19.Text = dr[1].ToString();
l19.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 20)
{
ll20.Text = dr[1].ToString();
l20.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 21)
{
ll21.Text = dr[1].ToString();
l21.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 22)
{
ll22.Text = dr[1].ToString();
l22.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 23)
{
ll23.Text = dr[1].ToString();
l23.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
if (id == 24)
{
ll24.Text = dr[1].ToString();
l24.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
id = id + 1;
}
}
catch (Exception ex)
{
lblError.Text = "فشل في إحظار الأخبار";
}
finally
{
conn.Close();
}
}
我建议您更新SQL查询以完成您的工作,并避免2次数据库命中,您可以通过以下方式完成:
string str =
"SELECT * FROM table1 WHERE cat = 1 and datee = @dt ORDER BY datee DESC " +
"UNION SELECT * FROM table1 WHERE cat = 1 and datee < @dt AND (SELECT COUNT(*) FROM table1 WHERE cat = 1 and datee = @dt) = 0 ORDER BY datee DESC";
您可以看到,如果这些结果的计数为0,我会将日期之前的所有结果加入结果,这意味着如果未选择任何结果,请选择该日期之前的结果
int id = 1;//???????
foreach (DataRow dr in dt.Rows)
{
if (id == 1)//???????
{
ll1.Text = dr[1].ToString();
l1.ImageUrl = @"photo\" + dr[1].ToString() + @".jpg";
}
您总是检查ID是否为ID=1
不要这样做,请使用以下命令:
if ( dr[1] == id)
{
...
}
id++
.
.
.
下面是一些代码,用于获取整个第一天中所有在时间上有任何行向后移动的项目。这假设SQL Server 2005或更高版本您没有说明正在使用的DBMS和版本,请这样做!:
WITH Data AS (
SELECT TOP 1 WITH TIES
*
FROM dbo.table1
WHERE
cat = 1
AND datee >= DateAdd(day, -5, @dt)
ORDER BY
Convert(date, datee) DESC
)
SELECT *
FROM Data
ORDER BY datee DESC
;
如果您可以对前端的行进行排序,并且您可能应该这样做,那么您就不需要额外的外部查询。使用此TOP 1 WITH TIES语法,您无法向内部ORDER BY子句添加更多表达式,因为这将更改所选内容
您可能还应该只选择所需的列,而不是表中的所有内容。date before是否意味着您要获取所有数据。请澄清。llx和lx确实需要是阵列。您的代码可以这样放在一个页面上,并且可读性更好。@saravanan是的,如果没有来自的数据,则所有数据都是以前日期的数据today@coderoaq:您可以通过两种方式尝试此操作,或者运行查询并获取日期数据。如果未获得任何信息,请重新运行另一个查询并在之前获取数据。或者,您可以使用SP在数据库端完成任务。如果没有日期输入,您可以将其从filter子句中删除,从而获得所有数据,而不仅仅是今天的数据。如果之前的日期也是空的呢?更好的是,将查询封装为存储过程。如果您的查询对外公开,则可能会发生注入攻击:如上所述创建PROC myOlderDateCat@ParamLastDate。也不要使用select*,只返回所需的行。将其拖动到LinqToDB类中。将它绑定到网格上,几乎所有的工作都将为您完成。