- PR -

OracleDataAdapterのFill()時にORA-00933エラーが出ます

投稿者投稿内容
リズ
会議室デビュー日: 2005/04/21
投稿数: 18
投稿日時: 2005-10-05 16:16
こんにちは。
どうしても抜け出せないところがあり、投稿させて頂きました。
SQLにパラメータを下のようにセットしているのですが、
da.Fill(data)の部分でアプリケーションエラーとなってしまいます。
ORA-00933: SQL command not properly ended

パラメータをセットするところが怪しいと思い、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5891&forum=7&7
こちらの記事など参考に他にも調べましたが、
自分のコードの問題点がわかりませんでした(>_<)
パラメータを使わず、SQLを直に書きますと、問題はありませんでした。
どなたかご指摘いただけませんでしょうか。
どうぞ宜しくお願い致します。

以下、コードになります。

--コード-------------------------------------------------
OracleDataAdapter da = New OracleDataAdapter
da.SelectCommand = New OracleCommand
da.SelectCommand.Connection = New OracleConnection(ConnectionString)
DataSet ds = new DataSet();

Dim paramName() As String = {":userId", ":passwd"}
Dim paramValue() As String = {id, pass}
Dim query As String = "select * from hogeTable where SHAIN_NO=:userId and PASSWORD=:passwd;"

With da.SelectCommand
  .CommandType = CommandType.Text
  .CommandText = query
  .Parameters.Add(paramName(0), OracleType.VarChar, 5).Value = paramValue(0)
  .Parameters.Add(paramName(1), OracleType.VarChar, 30).Value = paramValue(1)
End With

da.Fill(data)←ココでエラー
-----------------------------------------------------------
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-05 16:28
こんにちは、じゃんぬ です。

引用:

リズさんの書き込み (2005-10-05 16:16) より:

以下、コードになります。
コード:

OracleDataAdapter da = New OracleDataAdapter
da.SelectCommand = New OracleCommand
da.SelectCommand.Connection = New OracleConnection(ConnectionString)
DataSet ds = new DataSet();
       
Dim paramName() As String = {":userId", ":passwd"}
Dim paramValue() As String = {id, pass}
Dim query As String = "select * from hogeTable where SHAIN_NO=:userId and PASSWORD=:passwd;"

With da.SelectCommand     
  .CommandType = CommandType.Text
  .CommandText = query 
  .Parameters.Add(paramName(0), OracleType.VarChar, 5).Value = paramValue(0)
  .Parameters.Add(paramName(1), OracleType.VarChar, 30).Value = paramValue(1)
End With

da.Fill(data)←ココでエラー



それより、このコードって本当に VB ですか?
前半は VB じゃないように思えます。

Dataset はインスタンス化しているものの使っていませんし、
data ってどこから現れたのか不明ですし... etc

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
リズ
会議室デビュー日: 2005/04/21
投稿数: 18
投稿日時: 2005-10-05 16:55
じゃんぬさん、こんにちは。
ご指摘の点、申し訳ありません。vb.netですがコードは私の記述ミスです。
前半部の記述ですが、実はあるクラスがありまして、
その中で下のようなコードを通っています。
それを未熟な私がひとつにまとめようとしたため、あのようなコードを提示してしまいました。
申し訳ありませんでした。

Private da As OracleDataAdapter
Public Sub New()
da = New OracleDataAdapter
da.SelectCommand = New OracleCommand
da.SelectCommand.Connection = New OracleConnection(ConnectionString)
End Sub

また、da.Fill(data)は、da.Fill(ds)の間違いです。
重ね重ね、失礼致しました。

以下、修正コードです。
コード:
--------------------------------------------------------------------------------
***あるクラス***
Private da As OracleDataAdapter
Public Sub New()
da = New OracleDataAdapter
da.SelectCommand = New OracleCommand
da.SelectCommand.Connection = New OracleConnection(ConnectionString)
End Sub
****************

***問題のコード***
DataSet ds = new DataSet();

Dim paramName() As String = {":userId", ":passwd"}
Dim paramValue() As String = {id, pass}
Dim query As String = "select * from hogeTable where SHAIN_NO=:userId and PASSWORD=:passwd;"

With da.SelectCommand
  .CommandType = CommandType.Text
  .CommandText = query
  .Parameters.Add(paramName(0), OracleType.VarChar, 5).Value = paramValue(0)
  .Parameters.Add(paramName(1), OracleType.VarChar, 30).Value = paramValue(1)
End With

da.Fill(ds)←ココでエラー

****************
--------------------------------------------------------------------------------
パラメータをaddする部分で問題点ありましたらご教示お願い致します。
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2005-10-05 17:01
引用:

Dim paramName() As String = {":userId", ":passwd"}


ここは単に
コード:
Dim paramName() As String = {"userId", "passwd"}


で良かったんじゃなかったでしたっけ?
結構当てずっぽうですので、間違っていたらごめんなさい。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-10-05 17:02
ODP.NETなどまだ不勉強なので、的外れでしたらごめんなさい。

引用:

リズさんの書き込み (2005-10-05 16:55) より:

コード:
Dim query As String = "select * from hogeTable where SHAIN_NO=:userId and 




と書かれていますが、SQLに「:」があるとバインド変数とみなされますよね・・・。
これが原因の可能性があるのでは・・・?と思ったんですが、いかがでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-05 17:20
こんにちは、じゃんぬ です。

引用:

ORA-00933: SQL command not properly ended


SQL コマンドが正しく終了していません。ですよね。
だから以下のように怪しいと思ったのですよね?

引用:

パラメータをセットするところが怪しいと思い、


そう思ったのであれば、パラメタを設定するのはやめて、
生の SQL コマンドで試されたりしました?
デバッグは、まず原因を探ることを初めに行います。
憶測で悩むより、原因を確定させてから試行錯誤するべきだと思います。

# そういえば、Adapter の場合は Open しなくても良いんでしたよね。
# あやうく指摘するところでした。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-10-05 17:24
NAL-6295です。
引用:

Dim query As String = "select * from hogeTable where SHAIN_NO=:userId and PASSWORD=:Passwd;"



最後のセミコロンが余計なのだと思います。

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2005-10-05 17:25 ]

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2005-10-05 17:26 ]
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-10-05 17:30
あ〜ごめんなさい。
引用:

夏椰【SUICA】さんの書き込み (2005-10-05 17:02) より:
引用:

コード:
Dim query As String = "select * from hogeTable where SHAIN_NO=:userId and 




と書かれていますが、SQLに「:」があるとバインド変数とみなされますよね・・・。
これが原因の可能性があるのでは・・・?と思ったんですが、いかがでしょうか?


OTNにいってサンプルコードあさってみたところ、
SQL文中に「:」があるのは正しくて、
パラメータ名称に「:」はなくていいようです。
#いーたさんの指摘が正しいようです。

すみませんでした。

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