- PR -

DataAdapterからinsertした場合の自動採番の取得方法

1
投稿者投稿内容
.netデビュー
会議室デビュー日: 2007/01/24
投稿数: 2
投稿日時: 2007-01-25 09:21
お世話になります。

初めてなのですが、どうしても行き詰ったので質問させて頂きます。

環境:VS2005、C#、Oracle10g

OracleDataAdapterからDataTableの新規行をinsertしています。

ソース
OracleCommandBuilder objCommandBuilder = new OracleCommandBuilder(dataAdapter);
DataTable dataTable = (DataTable)bSource.DataSource;
DataRow dataRow = dataTable.NewRow();
dataTable.Rows.Add(新規行dataRow作成メソッド);
dataAdapter.Update(dataTable);

この際、oracleで自動採番された値を取得したいのですが、どのように取得すればよろしいのでしょうか。
OracleRowUpdatedEventHandlerから取得しようとしていたのですが、渡ってきたOracleRowUpdatedEventArgsには入っていないようです。

初歩的な質問かも知れませんが、よろしくお願いします。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-01-26 06:07
こんな感じです。

コード:
Sub HandledRowUpdated(...)
  If e.Status = UpdateStaus.Continue AndAlso _
     e.StatementType = StatementType.Insert Then
     e.Row("CustomerID") = CInt(cmdRefresh.ExecuteScalar)
     e.Row.AcceptChanges()
  End If
End Sub



cmdRefreshでは、次のようなSQLを使用します。

SELECT Customers_CustomerID_Seq.CURRVAL FROM DUAL;
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
.netデビュー
会議室デビュー日: 2007/01/24
投稿数: 2
投稿日時: 2007-01-26 15:08
ありがとうございました。
てっきりどこかかから値が取れるものだと思っていたので、sqlを発行すると言うところに思いつきませんでした。

また何かあった場合は、よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-01-26 21:50
 私は、クライアント側では「仮 ID」を表示させておき、サーバへコミットした時点で仮 ID に対応する ID を取得しています。
 クライアントが複数ある場合、CURRVAL が、「現在のクライアントが取得した値」を指しているかどうか保証されないからです。

 または、SELECT シーケンス.NEXTVAL FROM DUAL によって、クライアント側で ID を取得します。
_________________
1

スキルアップ/キャリアアップ(JOB@IT)