SQLDataAdapter和更新的问题

时间:2010-08-04 17:16:57

标签: c# asp.net

问题是当我向数据集添加第二个数据行时。如果我删除//注释,我只会获得1行而不是80

SqlDataAdapter indicatorsExp = new SqlDataAdapter();
string sqlExp = "SELECT * FROM BusinessApplications.tbl_WPI_Site_Indicators_Exp " +
                "where Year = '" + year + "' and  Month = '" + month + "'";
indicatorsExp.SelectCommand = new SqlCommand(sqlExp, conn);
SqlCommandBuilder cbexp = new SqlCommandBuilder(indicatorsExp);
indicatorsExp.InsertCommand = cbexp.GetInsertCommand();
DataSet dsExp = new DataSet();
indicatorsExp.Fill(dsExp, "explanations");
DataTable explanations = dsExp.Tables["explanations"];

//.......
foreach (ISite site in sites)
{
    DataRow drexp1 = explanations.NewRow();
    try
    {
        drexp1["PlantId"] = site.ID;
        drexp1["Month"] = month;
        drexp1["Year"] = year;
    }
    catch { }
    DataRow drexp2 = explanations.NewRow();
    try
    {
        drexp2["PlantId"] = site.ID;
        drexp2["Month"] = month;
        drexp2["Year"] = year;
    }
    catch { }

    explanations.Rows.Add(drexp1);
    indicatorsExp.Update(dsExp, "explanations");
//    explanations.Rows.Add(drexp2);
//    indicatorsExp.Update(dsExp, "explanations");

    }

1 个答案:

答案 0 :(得分:0)

1 - 如果Select *确实存在于您的代码中,请修复它。
2 - 你真的需要在Try / Catch中包装Rows.Add()Update()语句以及你正在做的事情。我通常会对整个事情使用一次try / catch,我当然不会像你一样吞下异常。

有了这些说法,你的问题很难理解你正在做什么。完成上述两个修复后,我也会改变这个:

explanations.Rows.Add(drexp1);
explanations.Update(dsExp, "explanations");
explanations.Rows.Add(drexp2);
explanations.Update(dsExp, "explanations");

到此:

explanations.Rows.Add(drexp1);
explanations.Rows.Add(drexp2);
explanations.Update(dsExp, "explanations");

使用(特别)最后两次更改(仅调用Update一次,并实际处理您的异常,即使您只是重新抛出它们),您可以解决问题。至少,您应该获得有关实际问题 的更好信息,以便找到并纠正它。