我目前使用一个按钮来在表中插入/更新内容。然后它取得上传的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