2011-04-24 63 views
0

我試圖用除週日之外的全年日期填充表格。以下是我的代碼。在插入數據時重複行

for (int i = 0; i < 365; i++) 
     { 

      if (b <= 6) 
      { 
       cmd.Parameters["@Shift"].Value = "S" + b.ToString(); 
      } 
      b++; 
      if (b > 6) 
       b = 1; 


      if (date.DayOfWeek != DayOfWeek.Sunday) 
      { 
       cmd.Parameters["@Date"].Value = date.ToString("d"); 
      } 
      date = date.NextDay(); 
      sqlConn.Open(); 
      cmd.ExecuteNonQuery(); 
      sqlConn.Close(); 
     } 

我使用的擴展方法從http://fluentdatetime.codeplex.com/

問題是,插入行時,除了重複週日之前的日期,所有內容都是正確的。

例如,

4/28/2011 < Thu 
    4/29/2011 < Fri 
    4/30/2011 < Sat 
    4/30/2011 < Sat 
    5/2/2011 < Mon 

我有什麼錯?

PS。當我試圖找出斷點並且指針到達sqlConn.Open()時,Visual Studio 2010會說「沒有可用的源」。

+0

'如果(date.DayOfWeek!= DayOfWeek.Sunday)'想必你不應該執行'insert'可言。您的執行不在「if」塊中。這是填充日曆表BTW的非常低效的方式。 – 2011-04-24 17:17:14

+0

感謝您的建議。請讓我知道是否有更好的方法。我仍然是一個學習者=) – 2011-04-24 17:21:44

+0

我會在一個語句而不是365調用數據庫使用其中一種技術[從這裏](http://stackoverflow.com/questions/10819/sql-auxiliary-表的號碼/ 2663232#2663232)。這會生成數字而不是日期,但使用'DATEADD(DAY,N-1,'20110101')' – 2011-04-24 17:38:26

回答

1

您必須將插入邏輯封裝到if塊中。

試試這個

if (date.DayOfWeek != DayOfWeek.Sunday) 
{ 
    cmd.Parameters["@Date"].Value = date.ToString("d"); 

    sqlConn.Open(); 
    cmd.ExecuteNonQuery(); 
    sqlConn.Close(); 
} 
date = date.NextDay(); 
+0

這些數字很容易生成日期。它只創建6行。 – 2011-04-24 17:22:22

+0

在你的'if'裏面加上'date.NextDay()','date'會在星期天過去嗎? – Gabe 2011-04-24 17:23:58

+0

@加貝很好。沒有注意到。 – 2011-04-24 17:26:59