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



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

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

我知道,如果我将这些过程配置为适配器中的独立查询,我可以将它们ExecuteMode设置为Scalar并以这种方式检索返回值。我想把这些过程保留为TableAdapterInsertCommandUpdateCommandDeleteCommand属性,因为这允许在前端使用更简单的代码,这些DataTables绑定到一个DataGridView对象。有没有办法从TableAdapter.Update()调用上的相应存储过程获取返回值?

因此,我能够通过本质上扩展适当的设计器生成的TableAdapter类来访问我需要的值。

我最终向相应的TableAdapter类添加一个属性,该类检索每个命令(InsertCommandUpdateCommandDeleteCommand(的相应输出参数的值。当我在对相关DataTables进行的每个离散编辑时调用 Update((,因此只有一个值不应为空。非 null 的值由属性 getter 返回。请参阅下面的代码。

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为我指明了正确的方向。

最新更新