我有DataSet
包含一系列类似的DataTable
个对象。所有表都使用TableAdapters
来处理与数据库的插入,更新和删除交互。由于每个表都代表一个数据库视图,因此我使用数据库中的存储过程来获取InsertCommand
,UpdateCommand
和DeleteCommand
属性(而不是自动生成的DB直接方法)。
每个上述存储过程都会返回一个我想在调用TableAdapter.Update()
方法时捕获的值。不幸的是,该方法似乎只返回受其执行的查询影响的行数。
我知道如果我将这些过程配置为适配器中的独立查询,我可以将ExecuteMode
设置为Scalar
并以此方式检索返回值。我希望将这些程序保留为InsertCommand
的{{1}},UpdateCommand
和DeleteCommand
属性,因为这样可以在前端提供更简单的代码, TableAdapter
绑定到DataTables
对象。有没有办法可以在DataGridView
调用中从相应的存储过程中获取返回值?
答案 0 :(得分:0)
所以我能够通过基本上扩展适当的设计器生成的TableAdapter
类来访问我需要的值。
我最后在相应的TableAdapter
类中添加了一个属性,该类检索了每个命令(InsertCommand
,UpdateCommand
和DeleteCommand
)的相应输出参数的值。 。当我在对所讨论的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指出我正确的方向。