2013-05-26 108 views
0

我想实现的是以下内容: -根据日期时间获取值

1-从数据库中获取具有当前日期(今天)的记录。 2-如果数据库没有从今天开始的记录,我希望它从前一天开始。 3-如果前一天没有任何记录,我希望它能够从前一天获得它们,等等。

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(); 
    } 
} 
+0

'以前的日期'是否意味着您想要获取所有数据。请澄清。 – Saravanan

+0

llx和lx确实需要是数组。你的代码可以适合在一个页面上,并且可读性更强。 – nvoigt

+0

@saravanan yes从今天开始的所有数据,如果没有今天的数据 – coderoaq

回答

0

我建议您更新您的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(意味着如果被选择任何内容,选择在该日期之前的那些)

+0

更好的是,将查询封装为存储过程。如果你的查询暴露给外部世界,那么你有注入攻击的可能性:CREATE PROC myOlderDateCat @ParamLastDate AS select select。也不要使用select *,只返回你想要的行。将其拖到LinqToDB类中。把它绑在网格上,几乎所有的工作都会为你完成。 –

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++ 
. 
. 
. 
0

这里有一些代码,从整个第一天有任何行(后退时间)的所有项目。这是假设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子句中,因为这会更改所选内容。

您也应该只选择所需的列而不是表中的所有内容。