【问题标题】:How to update a single row / single cell in a database table using TableAdapters?如何使用 TableAdapters 更新数据库表中的单行/单个单元格?
【发布时间】:2018-07-30 15:45:36
【问题描述】:

我只想更新单行/单个单元格而不是我的数据库(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.

【问题讨论】:

    标签: c# sql-server tableadapter


    【解决方案1】:

    确保您正在使用的表有一个主键,为此在 sql-server 中为您希望作为主键的列 (yourColumnName) 执行以下 SQL commnad:

    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 配置向导。单击高级选项...按钮,您应该会看到复选框标题刷新数据表现在被选中。如果您在未检查之前查看过此内容,并且在检查后无法保存。这允许您更新数据库中的表。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2020-01-05
      • 2011-04-03
      相关资源
      最近更新 更多