- PR -

ORA-01036: 変数の名前/数が無効です。

1
投稿者投稿内容
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2005-01-09 17:23
ASP.NET、Oracle9.0で開発しております。

1.データアダプタ構成ウィザードを使用し、データアダプタを作成します。
2.作成したデータアダプタよりデータセットを生成します。
3.更新処理で上記で作成したデータセットを使用しアダプタのupdateメソッドを作成します。
DbDataAdapter.Update(DataSet)
とした場合にまれに
「ORA-01036: 変数の名前/数が無効です。」といったエラーが出るテーブルがあります。
原因が解らず困ってます。ご存知の方よろしくお願いします。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-01-10 07:06
引用:

DbDataAdapter.Update(DataSet)
とした場合にまれに
「ORA-01036: 変数の名前/数が無効です。」といったエラーが出るテーブルがあります。
原因が解らず困ってます。ご存知の方よろしくお願いします。


DataAdapterのUpdateメソッドで使用する更新用のSQL文は、CommandBuilderで作成していますか。それとも、手動で作成していますか?
以下のステートメントを追加して確認してみてください。
Response.Write(DbDataAdapter.GetUpdateCommand.CommandText)

それから、Oracleにネイティブに対応しているODP.NETを使用していますか。

_________________
ASP.NETサンプル集(Web Matrix版)

[ メッセージ編集済み 編集者: Access 編集日時 2005-01-10 07:06 ]
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2005-01-11 10:12
Accessさん、こんにちわ。
Response.Write(DbDataAdapter.GetUpdateCommand.CommandText)
を記述してみたのですが、OlacleDataAdapterのメンバではありませんのエラーが出ます。
あまり詳しくないので正確な解答は出来ないのですが、
コードは以下のようになってます。
Dim myRow As DataRow
Dim myOCN As New OracleConnection
Dim myODA As New OracleDataAdapter
Dim myCOM As OracleCommand
Dim mySQL As String
Dim myDS As New DataSet
Dim myDV As New DataView

myOCN.ConnectionString = 'ここにコネクションコードを記入'
mySQL = "SELECT * FROM ATBL WHERE CODE=" & strCode
myCOM = New OracleCommand(mySQL, myOCN)
myODA.SelectCommand = myCOM
myODA.Fill(myDS, "ATBL")
myDV.Table = myDS.Tables("ATBL")
If myDV.Count > 0 Then
myRow = myDV(0).Row
Else
myRow = myDV.Table.NewRow()
myDV.Table.Rows.Add(myRow)
End If
myRow("NAME") = "名称1"

'更新
DbDataAdapter.Update(myDS) '<--これはデータアダプタ構成ウィザードで作成したアダプターでアップデートしてる。


★ちなみにSELECT文で使用したデータアダプタを使用しCommandBuilderを使用するとエラーにはなりません。
Dim cmd As New OracleCommandBuilder(ODA_Work)
myODA.UpdateCommand = cmd.GetUpdateCommand
myODA.Update(myDS, "ATBL")

SELECTした際のデータアダプタとUPDATEした際データアダプタが違うのが悪いのでしょうか?

データセットに作成された項目数(項目名)がウィザードで作成したコマンドと違ってるのかもしれません。もう少し調査してみます。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-01-11 20:16
引用:


★ちなみにSELECT文で使用したデータアダプタを使用しCommandBuilderを使用するとエラーにはなりません。
Dim cmd As New OracleCommandBuilder(ODA_Work)
myODA.UpdateCommand = cmd.GetUpdateCommand
myODA.Update(myDS, "ATBL")

SELECTした際のデータアダプタとUPDATEした際データアダプタが違うのが悪いのでしょうか?


CommandBuilderで作成したUPDATEのSQL文を使用するとOKということは、
OracleDataAdapterのウィザードで生成されたUPDATE文と異なるのでは?

以下のようにTraceを入れてDataAdapterのウィザードで作成されたSQLと
比較してみたらどうでしょうか。

Dim cmd As New OracleCommandBuilder(ODA_Work)
Trace.Warn(cmd.GetUpdateCommand.CommandText)
myODA.UpdateCommand = cmd.GetUpdateCommand
myODA.Update(myDS, "ATBL")


_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
1

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