如何使用 TableAdapters 更新数据库 table 中的单个行/单个单元格?

How to update a single row / single cell in a database table using TableAdapters?

我只想更新我的数据库(sql-服务器)中的单个行/单个单元格而不是整个 table,有没有办法做到这一点?我尝试了以下操作(假设我知道我的 table 中有一行索引为 9,所以我不需要检查并且我知道我的 table 中有第三列所以我不必担心任何超出范围的索引都会抛出异常:

// Identifiers used are:
var myTableAdapter = new myDatabaseTableAdapters.myTableTableAdapter();
var myDataTable = myTableAdapter.GetData();
string myQuery = "[Index] = '9'",
    updatedValue = "Some new value";

try 
{
    // Grab the row which needs updating
    var rowForUpdate = (System.Data.DataRow)myDataTable.Select(myQuery)[0];
    rowForUpdate[2] = updatedValue;
    myTableAdapter.Update(rowForUpdate);
}
catch (System.Exception ex) 
{
    System.Console.WriteLine(ex.Message);
}

但是这会引发以下异常:

Update requires a valid UpdateCommand when passed DataRow collection with modified rows.

确保您正在使用的 table 有一个主键,为此在 sql-server 中为您希望成为主键的列执行以下 SQL 命令键(您的列名):

ALTER TABLE dbo.yourTableName
ALTER COLUMN yourColumnName int NOT NULL;

此命令将确保 yourColumnName 不能为 Nullable,这是主键的情况。下一步执行:

ALTER TABLE dbo.yourTableName ADD PRIMARY KEY (yourColumnName);

这改变了 table 现在有一个你想要的列的主键。现在回到 Visual Studio 2017 年,在 Solution Explorer、double-click myDataBaseDataSet.xsd 文件中,这会显示您的 table 模式.滚动到 yourTableName,它现在应该有一个主键,右键单击它(这里表示 myTableNameTableAdapter header 名称)并选择 Configure... 选项。 TableAdapter 配置向导将 pop-up。单击 高级选项... 按钮,您应该会看到复选框标题 刷新数据 table 现在已选中。如果你之前看过这个是没有勾选的,勾选后无法保存。这允许您更新数据库中的 table。

上面给出的代码不需要修改。