2015-11-11 41 views
0

我正在嘗試將多個日期插入到Access數據庫中。 代碼中,我用它來做到這一點是這樣的:將Monthcalendar中的多個日期插入Access-mdb

string start = monthCalendar1.SelectionRange.Start.ToShortDateString(); 
string end = monthCalendar1.SelectionRange.End.ToShortDateString(); 
DateTime startDay = Convert.ToDateTime(start); 
DateTime endDay = Convert.ToDateTime(end); 
_startDate = startDay; 
_endDate = endDay; 
do 
{ 
    var VacationDate = _startDate.ToShortDateString(); 
    var VacationStart = DateTime.MinValue.ToShortTimeString(); 
    var VacationEnd = DateTime.MinValue.ToShortTimeString(); 
    var VacationPause = DateTime.MinValue.ToShortTimeString(); 
    var Worktime = "08:00"; 
    var Comments = "on Vacation";  
    command.Parameters.AddWithValue("Date", VacationDate); 
    command.Parameters.AddWithValue("Start", VacationStart); 
    command.Parameters.AddWithValue("End", VacationEnd); 
    command.Parameters.AddWithValue("Pause", VacationPause); 
    command.Parameters.AddWithValue("Worktime", Worktime); 
    command.Parameters.AddWithValue("Comments", Comments);  
    command.CommandText = "insert into " + user + " (Date, Start, End, Pause, Worktime, Comments) values (@Date, @Start, @End, @Pause, @Worktime, @Comments)"; 
    command.Connection = con; 
    command.ExecuteNonQuery();  
    string query = "select * from " + user; 
    command.CommandText = query; 
    OleDbDataAdapter Daten = new OleDbDataAdapter(command); 
    DataTable Datenquelle = new DataTable(); 
    Daten.Fill(Datenquelle);   
    dataGridView1.DataSource = Datenquelle; 
    dataGridView1.AllowUserToResizeColumns = true; 
    dataGridView1.AllowUserToResizeRows = true; 
    dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 
    int totalRowHeight = dataGridView1.ColumnHeadersHeight; 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
     totalRowHeight += row.Height; 
    dataGridView1.Height = totalRowHeight; 
    this.Height = dataGridView1.Height + 100;  
    _startDate = _startDate.AddDays(1); 
} 
while (_startDate <= _endDate); 
{ 
    Debug.WriteLine(startDay); 
    startDay = startDay.AddDays(1); 
} 

到目前爲止我的代碼似乎工作,這樣我可以補充說,三個日期,如果你選擇在MONTHCALENDAR三個日期。 但我沒有得到實際的日期。我得到的只是,例如,在我的數據庫中有三個以下條目與同一日期。 (這是開始日期)

也許我只是爲了codeblind現在看到我的錯誤....如果有人可以啓發我爲什麼它只插入我的初始startDate而不是以下選定的日子,我會非常感激。 :)

在此先感謝大家的回答。

+0

*「3條以下條目」* ...他們似乎已經迷路了。 - 爲什麼你在INSERT記錄的循環中有SELECT查詢?事後不該來嗎? – Andre

+0

@ Andre451感謝您的評論。 這只是我實際編碼的一部分。我有選擇查詢已經上面的方式來啓動我的數據網格。但我想用新的條目刷新數據網格,所以我在INSERT之後做了一個SELECT來正確顯示新數據。 (也許有更好的方法來做到這一點?我仍然很新的編碼,特別是與數據庫工作):D – scitch

+0

您定義Vacationday,但插入VacationDate – Johanness

回答

0

擴展我上面的評論:這是否工作?

string start = monthCalendar1.SelectionRange.Start.ToShortDateString(); 
string end = monthCalendar1.SelectionRange.End.ToShortDateString(); 
DateTime startDay = Convert.ToDateTime(start); 
DateTime endDay = Convert.ToDateTime(end); 
_startDate = startDay; 
_endDate = endDay; 
var VacationDate = _startDate.ToShortDateString(); 
do 
{ 
    VacationDate = _startDate.ToShortDateString(); 
    command.Parameters.AddWithValue("vDate", VacationDate); 
    command.CommandText = "insert into " + user + " (Date) values (@vDate)"; 
    command.Connection = con; 
    command.ExecuteNonQuery();  
    string query = "select * from " + user; 
    command.CommandText = query; 
    OleDbDataAdapter Daten = new OleDbDataAdapter(command); 
    DataTable Datenquelle = new DataTable(); 
    Daten.Fill(Datenquelle);   
    dataGridView1.DataSource = Datenquelle; 
    _startDate = _startDate.AddDays(1); 
} 
while (_startDate <= _endDate); 
{ 
    Debug.WriteLine(startDay); 
    startDay = startDay.AddDays(1); 
} 
+0

aaaah好了,現在我明白你的意思了。感謝您的解釋。不幸的是,這也不起作用... – scitch

+0

...不工作是不夠的。如果你需要幫助,你必須自己做點事情。我明確地解釋瞭如何獲得更多的信息,以幫助任何願意幫助找出問題所在的人。我還有一個猜測 - 在代碼snipet你沒有創建OleDb命令:'OleDbCommand命令=新 OleDbCommand(queryString,連接);' – Johanness

+0

再次感謝您的評論。對不起,如果我理解起來有點遲緩。正如我所說我真的在這個新的...... 我不確定如何獲取更多的信息,因爲我沒有得到任何錯誤或調試報告。 Connection在代碼之外聲明,所以我可以在代碼的其他部分多次使用它。 它真的似乎是「只」與如何獲得startDay.AddDays(1)的問題;到vDate ...但我不能真正找出爲什麼,因爲它應該(?)採取新的startDay,當它第二次運行代碼....至少這是我的想法。再次感謝你的幫助。 – scitch

1

所以每個人都像我一樣誰可能會遇到同樣的問題:

我顯然忘了宣佈他們後清除我的參數。所以一個簡單的

command.Parameters.Clear(); 

爲我做了這份工作。