从使用存储过程的TableAdapter.Update()方法返回值

时间:2018-06-14 17:51:52

标签: c# data-binding ado.net

我有DataSet包含一系列类似的DataTable个对象。所有表都使用TableAdapters来处理与数据库的插入,更新和删除交互。由于每个表都代表一个数据库视图,因此我使用数据库中的存储过程来获取InsertCommandUpdateCommandDeleteCommand属性(而不是自动生成的DB直接方法)。

每个上述存储过程都会返回一个我想在调用TableAdapter.Update()方法时捕获的值。不幸的是,该方法似乎只返回受其执行的查询影响的行数。

我知道如果我将这些过程配置为适配器中的独立查询,我可以将ExecuteMode设置为Scalar并以此方式检索返回值。我希望将这些程序保留为InsertCommand的{​​{1}},UpdateCommandDeleteCommand属性,因为这样可以在前端提供更简单的代码, TableAdapter绑定到DataTables对象。有没有办法可以在DataGridView调用中从相应的存储过程中获取返回值?

1 个答案:

答案 0 :(得分:0)

所以我能够通过基本上扩展适当的设计器生成的TableAdapter类来访问我需要的值。

我最后在相应的TableAdapter类中添加了一个属性,该类检索了每个命令(InsertCommandUpdateCommandDeleteCommand)的相应输出参数的值。 。当我在对所讨论的DataTables进行的每个离散编辑上调用Update()时,只有一个值应该不为null。属性getter返回非null值。请参阅下面的代码。

public partial class ExcelViewTableAdapter
{
    public int? UpdateReturnValue
    {
        get
        {
            int? insertVal = (int?)this._adapter.InsertCommand.Parameters["@NextNoteInfoID"].Value;
            int? updateVal = (int?)this._adapter.UpdateCommand.Parameters["@NextNoteInfoID"].Value;
            int? deleteVal = (int?)this._adapter.DeleteCommand.Parameters["@DeletedNoteIdentifier"].Value;

            if (insertVal != null && updateVal == null && deleteVal == null)
            {
                return insertVal;
            }
            else if (updateVal != null && insertVal == null && deleteVal == null)
            {
                return updateVal;
            }
            else if (deleteVal != null && insertVal == null && updateVal == null)
            {
                return deleteVal;
            }
            else
            {
                return -1;
            }
        }
    }
}

感谢@Crowcoder指出我正确的方向。