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

时间:2018-07-30 15:45:36

标签: c# sql-server tableadapter

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

// 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.

1 个答案:

答案 0 :(得分:0)

确保要使用的表具有主键,要执行此操作,请在sql-server中为您要用作主键的列(yourColumnName)执行以下SQL逗号:

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

此命令将确保yourColumnName不能为Nullable(主键就是这种情况)。接下来执行:

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

这将更改表,使其现在具有所需列的主键。现在返回Visual Studio 2017,在 Solution Explorer 中,双击myDataBaseDataSet.xsd文件,这将显示表架构的可视化。滚动到yourTableName,它现在应该有一个主键,右键单击它(这里表示myTableNameTableAdapter标头名称),然后选择 Configure ... 选项。将弹出一个TableAdapter配置向导。单击高级选项... 按钮,您应该看到现在已选中复选框标题刷新数据表。如果您在未检查之前查看过它,并且在检查后无法保存。这使您可以更新数据库中的表。

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