2011-08-14 31 views
1

如果我有一个数据集被称为myDs,我在它通过直接访问像一个循环编辑字段中的以下内容:如何在更改数据库后保存DataSet?

for (int i = 0; i < myDS.Tables[TableName].Rows.Count; i++) 
{ 

    //some function or web method to get the id value of the record being updated 
    int n = getNewNumber(); 

    //updating the dataset record according to some condition 
    if (n == 0) 
    { 
     myDS.Tables[TableName].Rows[i]["id"] = n; 
     myDS.Tables[TableName].Rows[i]["description"] = "some data"; 
    } 
    else 
    { 
     myDS.Tables[TableName].Rows[i]["id"] = n; 
     myDS.Tables[TableName].Rows[i]["description"] = "new data"; 
    } 
} 

如何做出这些改变在数据库中完成的,因为我可以看到它在GridView当我做databind()但数据库不受影响,我尝试使用OdbcDataAdapter和OdbcCommandBuilder的更新方法填充&?

+0

后输入两个线** **什么数据库及其说明您使用的版本? –

+0

数据库是sybase,我使用odbc作为数据库连接,所以数据库引擎本身并不重要,因为使用了ODBC。 – TopDeveloper

回答

1

尝试使用本文中显示的TableAdapter.Update过程:How to: Update Records in a Database

此外,请确保您不仅拥有对您尝试连接的数据库的必要访问权限,还有权限更新所需表格中的记录。您可能会遇到阻止更新代码的SQL Server配置问题。

+0

这个链接很好,但我发现更新语句中的问题是我不应该更改主键,因为我在set子句和where子句中都使用它。 – TopDeveloper

0

既然是odbc,你可以用OdbcDataAdapter;然后调用:

adapter.Update(myDS.Tables[TableName]); 

声明:个人而言,我从来没有使用DataSet .... ....任何东西。因人而异。

+0

我这样做了,但数据库没有根据新的更新而改变,我的更新不能被写为Update Command,因为数据应该在循环中更新,因为主键(id)也被更新了,我不能使用它在Where子句中。 – TopDeveloper

0

你应该循环

myDS.AcceptChanges(); 
adapter.Update(myDS.Tables[TableName]); 
+0

但适配器在哪里?正如我在代码中看到的,OP只使用DataSet。如果适配器不可用,或者可能是内部的? (DataSet可能由Visual Studio自动生成,例如,当将ListBox绑定到新的Data源时)。如果只有DataSet对象可用,数据库如何保存? – Dexter

相关问题