我目前使用一個按鈕來在表中插入/更新內容。然後它取得上傳的CSV並根據行是否存在將其插入或更新到數據表中。C#更新數據問題
這裏是按鈕的OnClick後被解僱代碼:
if (ExcelDDL.SelectedValue == "Time Points" && fileName == "TimePoints.csv")
{
var GetTPoints = (SEPTA_DS.TimePointsTBLDataTable)tpta.GetDataByCategory(CategoryDDL.SelectedItem.ToString());
//Loop through each row and insert into database
int i = 0;
foreach (DataRow row in TempRouteDataTable.Rows)
{
//Gather column headers
var category = Convert.ToString(CategoryDDL.SelectedItem);
var agency = Convert.ToString(row["Agency"]);
if (agency == null || agency == "")
{
//If row is empty skip it entirely
goto skipped;
}
var route = Convert.ToString(row["Route"]);
var GetRShortName = (SEPTA_DS.RoutesTBLDataTable)rta.GetDataByRouteID(route);
var newRoute = "";
if (GetRShortName.Rows.Count > 0)
{
newRoute = Convert.ToString(GetRShortName.Rows[0]["route_short_name"]);
}
var direction = Convert.ToString(row["Direction"]);
var serviceKey = Convert.ToString(row["Service Key"]);
var language = Convert.ToString(row["Language"]);
var stopID = Convert.ToString(row["Stop ID"]);
var stopName = Convert.ToString(row["Stop Name"]);
if (stopName.Contains("accessible"))
{
string[] noHTML = stopName.Split('>');
int insertH = Convert.ToInt32(hta.InsertHandicapRow(newRoute,noHTML[2]));
}
var sequence = Convert.ToString(row["Sequence"]);
var origID = -1;
if (GetTPoints.Rows.Count > 0)
{
origID = Convert.ToInt32(GetTPoints.Rows[i]["TPointsID"]);
var GetID = (SEPTA_DS.TimePointsTBLDataTable)tpta.GetDataByID(origID);
if (GetID.Rows.Count < 1)
{
origID = -1;
}
}
if (origID == -1)
{
int insertData = Convert.ToInt32(tpta.InsertTimePoints(category, agency, newRoute, direction, serviceKey, language, stopID, stopName, sequence));
}
else
{
int updateData = Convert.ToInt32(tpta.UpdateTimePoints(category, agency, newRoute, direction, serviceKey, language, stopID, stopName, sequence, origID));
}
skipped:
i++;
}
}
你可以看到我是如何檢查是否插入或周圍的底部更新。我在這個程序的其他部分使用這種方法,它工作得很好。但在這種情況下,它極大地扭曲了我的數據表,我無法弄清楚爲什麼。
這是我的表[數據庫中目前沒有任何項目]插入後底部:
這與表中已有的數據重新上傳的CSV後的表:
更新There is no row at position 2230.
當什麼在代碼中腳麻造成THI我也收到此錯誤巨大的轉變?我只是檢查該ID是否存在以及是否更新而不是插入。
此外,我使用goto
的原因是因爲文檔中有空行需要跳過。
在「goto」上:如果您願意,可以輕鬆刪除它。只要定期執行'for'循環(應該是這樣)(有明確的初始化和遞增階段,我猜'Rows'是可索引的)並使用'continue'關鍵字來跳過迭代。 – 2010-09-14 16:46:10
這也將是一件好事(tm)來改變這一點:代理機構== null ||如果你的.net 4,你可以使用string.IsNullOrWhitespace() – 2010-09-14 18:06:30
@ Maud'Dib謝謝你,這是好得多。 – balexander 2010-09-14 18:08:21