【问题标题】:Strongly typed dataset adapter update won't insert a new row强类型数据集适配器更新不会插入新行
【发布时间】:2017-06-25 22:00:24
【问题描述】:

我有一个包含强类型数据集行的属性。 我已向我的数据集添加了插入和更新过程。 如果我向适配器传递一个已经存在的行,它会成功更新信息。但是,如果我创建一个新行,那么它不会将其插入到数据库表中。永远不会抛出异常,返回的 int 始终为 0。没有添加新行。

private MyDataset.MyDatasetGetDataRow _row;

private MyDataset.MyDatasetGetDataRow Rowa
{
    get { return _row; }
    set { _row = value; }
}

public void NewOne()
{    
    MyDatasetTableAdapters.MyDatasetGetDataTableAdapter adapter = new MyDatasetTableAdapters.MyDatasetGetDataTableAdapter();
    MyDataset.MyDatasetGetDataDataTable tbl = adapter.GetData(0, 0);
    MyDataset.MyDatasetGetDataRow row = tbl.NewMyDatasetGetDataRow();
    Rowa = row;    
}

public int Save()
{
    try
    {
       int a = -99;
       using (MyDatasetTableAdapters.MyDatasetGetDataTableAdapter adapter = new MyDatasetTableAdapters.MyDatasetGetDataTableAdapter())
       {
           a = adapter.Update(tbl);
       }
       return a;
    }
    catch (Exception ex)
    {
       throw new Exception("Error: It didn't save. (" + ex.Message + ")");
    }

}

【问题讨论】:

  • 新的不行。要使适配器工作,它需要一个文本 SQL 语句。您的代码没有 SQL,因此 Rowa/row 将始终为空。因此读取不起作用,因此很难判断您是否写入了数据。
  • 适配器通过与数据库的连接和存储过程附加了一个选择、更新和插入 SQL 语句。正如我所提到的,对现有行的更新有效,但是不会插入新行。 Rowa有数据存在,不为null,更新不报错,只是简单的返回0。
  • 什么???连接不会创建 SQL 语句,除非您在 C# 代码中以您未发布的不同方法执行此操作。
  • 这就是适配器的重点。适配器包含连接,它指向数据库中的 3 个存储过程。获取、更新和插入。获取和更新工作。插入没有。但它返回 0。你是说可能的原因是我的插入过程错误吗?
  • 谁告诉你的?适配器要求您添加文本命令。如果适配器中有一个 Select 命令,commandbuilder 将自动从选择中创建插入、删除和更新。但是适配器很笨,只做你编程的事情。

标签: c# ado.net dataset strongly-typed-dataset


【解决方案1】:

行不属于表,因此数据集不知道该行是新添加的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 2013-02-16
    • 2021-04-13
    • 2014-07-02
    • 1970-01-01
    • 2011-06-18
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多