2010-08-04 79 views
0

问题是当我添加第二个datarow数据集。如果我删除//意见,我只拿到1行补充,而不是80问题与SQLDataAdapter和更新

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"); 

    } 
+0

你可以让我们在你想要在这里玩魔术吗?它看起来很混乱,我无法弄清楚你想要做什么 – Jeroen 2010-08-04 17:27:28

回答

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"); 

随着(特别是)最后的两个变化(只调用一次更新,而实际上处理您的例外,即使你只是重新投掷它们),你可以解决这个问题。至少,您应该获得有关实际问题的更好信息,以便找到并更正它。