我一直在嘗試更新列上存儲的列表的結果列表<>。問題是,數據從列表只是第一個索引,保存的數據只來自列表的第一個索引。下面的代碼:使用列表中的值更新SQL Server表<C#
private void UpdateStatus()
{
sqlcon = con.ConnectSQL();
List<string> statusList = DetermineStatus();
for (int i = 0; i < statusList.Count; i++)
{
sqlcon.Open();
string sql = "update Table set Status= @status where Status is null";
SqlCommand sqlcom = new SqlCommand(sql, sqlcon);
using (sqlcom)
{
sqlcom.Parameters.Add(new SqlParameter("@status", statusList[i]));
sqlcom.ExecuteNonQuery();
}
sqlcon.Close();
}
}
對不起,如果這是有點愚蠢的問題,也是我爲不正確的英語遺憾因爲英語不是我的母語。先謝謝你。
編輯:我想我沒有澄清我想要做的更早。所以,在運行xls出勤數據導入後,代碼應該運行。由於數據僅包含進入和退出單獨行的時間,因此我一直在重新安排數據以及員工是否全職工作。
讓我來爲你說明。
下面是表格在數據庫中的樣子。
Date | TimeIn | TimeOut | ID | Status
對於XLS數據,它的結構是這樣的:
EventTime | ID | Name | Function
在一天的工作,員工應該爲獲得兩次登記他們的出勤,一次,一次失控以及他們是否進入或退出取決於功能列。實質上,我想要做的是這樣的:導入xls數據,將數據放到數據庫中相應的列中,並通過比較進入和退出時間以及放置時間來確定員工是否工作了一整天列表中的結果。我在條款上使用is null
的原因是在導入新數據之後唯一沒有Status
列中的數據的數據。
所以,我一直得到的問題是表中的數據正在更新列表的第一個索引。
例如,如果員工在第一天全職工作,而未在下一天工作。第一行的狀態列應該是Full Day
和下一個not Full Day
,但我在兩行都得到了Full Day
。
謝謝您花時間回答我的問題。
你的問題不清楚。列表的內容對應什麼?你想要做什麼? –
'SqlCommand sqlcom = new SqlCommand(sql,sqlcon);'在使用中包裝這個以及sql.Open()就是你所需要的全部你不需要顯式調用sql.Close();因爲你在使用..也顯示列表看起來像更改for循環到foreach循環,因爲你正在對一個集合...像'foreach(var s in statusList)'',如果你正在使用主數據庫中的鍵如何將它們與列表中正在更新的值進行匹配?這將因此更新一切..閱讀Sql Update語句 – MethodMan
@YakoubMassad爲了更清晰我已經編輯了這個問題,我希望它對你來說已經足夠清楚了。 – darthbadar