- PR -

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

投稿者投稿内容
リズ
会議室デビュー日: 2005/04/21
投稿数: 18
投稿日時: 2005-10-05 18:12
皆さんありがとうございます。
結果としましては、まだ解決しておりません。

1.いーたさん、夏椰さんからご指摘頂いた、パラメータ名称から':'を外しました。
 修正後→Dim paramName() As String = {"userId", "passwd"}

2.NAL-6295さんからご指摘頂いたSQL文末の';'を外しました。
 修正後→Dim query As String = "select * from hogeTable where SHAIN_NO=:userId and PASSWORD=:Passwd"

じゃんぬさん、SQL文字列をそのまま代入しますと正常に動作します。
ですので、やはりこのパラメータ化のコードがまだ何か問題があるように思います。
引き続き、私のほうでも調査を続けたいと思います。

どなたか、お気づきの点ございましたらご指摘をお願い致します。
ゆっきー
会議室デビュー日: 2005/09/21
投稿数: 10
投稿日時: 2005-10-05 18:42
引用:

リズさんの書き込み (2005-10-05 16:55) より:
da.Fill(ds)←ココでエラー




見当違いだったらごめんなさい。

da.Fillのパラメータはdsのみですか?

Overloads Public Function Fill( _
ByVal dataSet As DataSet, _
ByVal ADODBRecordSet As Object, _
ByVal srcTable As String _
) As Integer

[ メッセージ編集済み 編集者: ゆっきー 編集日時 2005-10-05 18:45 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-05 21:44
こんにちは、じゃんぬ です。
a
引用:

ゆっきーさんの書き込み (2005-10-05 18:42) より:

見当違いだったらごめんなさい。
da.Fillのパラメータはdsのみですか?


派生元クラスのオーバーロード全部確認してみましょう。(^-^;)

  DbDataAdapter.Fill メソッド

ADODB.Recordset? (^-^A)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-06 10:00
こんにちは、じゃんぬ です。

ODP.NET だと OracleCommand.BindByName = true; でないとダメなのかな。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
リズ
会議室デビュー日: 2005/04/21
投稿数: 18
投稿日時: 2005-10-06 12:54
じゃんぬさんこんにちは。
現在ODP.NETではなく、OracleDataAccessProvidor(System.Data.OracleClient)を使用しています。
ですのでOracleCommand.BindByName = true;が使えません。
先にお伝するべきでしたね、申し訳ありません。
引き続き調査します。もう2日間はまっています(T_T)
考え中
会議室デビュー日: 2005/10/06
投稿数: 1
投稿日時: 2005-10-06 13:36
初めて書き込み(下手ですみません)
パラメータ渡しをまねして作ってみました
Private Function CheckUser(ByVal strBusyo As String, ByVal strUserID As String, ByVal strPwd As String) As Integer
Dim con As New _
OracleConnection(ConfigurationSettings.AppSettings("conStringOracle"))
'Dim strchkSQL As String = String.Format("SELECT COUNT(*) FROM USER_MST WHERE BUSYO_CD='{0}' AND EMPLOYEE_CD='{1}' AND PWD='{2}'", strBusyo, strUserID, strPwd) <----引数にきちんと想定した値が入っているかチェック用
Dim strSQL As String = "SELECT COUNT(*) FROM USER_MST WHERE BUSYO_CD=:pm1 AND EMPLOYEE_CD=:pm2 AND PWD=:pm3"
Dim cmd As New OracleCommand(strSQL, con)
Dim paramName() As String = {"pm1", "pm2", "pm3"}
con.Open()
Dim recObj As OracleDataReader
Dim cnt As Integer
cmd.Parameters.Add(paramName(0), OracleType.VarChar, 4).Value = strBusyo
cmd.Parameters.Add(paramName(1), OracleType.VarChar, 9).Value = strUserID
  cmd.Parameters.Add(paramName(2), OracleType.VarChar, 12).Value = strPwd
recObj = cmd.ExecuteReader
recObj.Read()
cnt = recObj.GetValue(0)
recObj.Close()
con.Close()
Return cnt
End Function
特に問題なく動作DataSetでも同じ
Dim paramValue() As String = {id, pass}<---id,passの変数?
「SQL文字列をそのまま代入しますと正常に動作します。」とありますが
変数id,passを使用して実行されたのでしょうか?

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-06 13:39
じゃあ、私も手元にあるソースを投下してみましょう。

コード:

Private Shared Sub OneMethod()
    ' SQL コマンド
    Const COMMAND_TEXT As String = "SELECT * FROM HOGETABLE WHERE SHAIN_NO = :pShainNo AND Password = :pPassword"

    ' 接続文字列を生成する
    Dim nConnectionString As String = "..."

    ' Connection と Command を確立する
    Dim hConnection As New OracleConnection(nConnectionString)
    Dim hCommand    As New OracleCommand(COMMAND_TEXT, hConnection)
    
    ' バインド変数と値を設定する
    hCommand.Parameters.Add("pShainNo", OracleType.VarChar, 5).Value = "NakaHirotoshi"
    hCommand.Parameters.Add("pPassword", OracleType.VarChar, 30).Value = "Wankuma"

    ' DataAdapter を構築する
    Dim hAdapter As New OracleDataAdapter(hCommand)
    Dim hDataset As New System.Data.DataSet()

    ' Dataset を生成
    hAdapter.Fill(hDataset)

    ' 後始末 (正しくは オブジェクトの破棄を保証する を参照!)
    hAdapter.Dispose()
    hCommand.Dispose()
    hConnection.Close()
    hConnection.Dispose()
End Sub


# 問題なのは、今いる場所に OracleClient が入ってないことだったりw

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
リズ
会議室デビュー日: 2005/04/21
投稿数: 18
投稿日時: 2005-10-06 15:24
考え中さんこんにちは。

引用------------------------
Dim paramValue() As String = {id, pass}<---id,passの変数?
「SQL文字列をそのまま代入しますと正常に動作します。」とありますが
変数id,passを使用して実行されたのでしょうか?
----------------------------
はい、idとpasswordの変数をparamValue()に入れています。

>「SQL文字列をそのまま代入しますと正常に動作します。」
というのは、Parameters.Add〜を使わずに、CommandTextに
"select SHAIN_NO, PASSWORD from hogeTable where SHAIN_NO = 'a123' and PASSWORD = 'abc'"
というSQLをそのまま入れたら問題なく動作した、という意味です。
念のため、
  .Parameters.Add(paramName(0), OracleType.VarChar, 5).Value = paramValue(0)
  .Parameters.Add(paramName(1), OracleType.VarChar, 30).Value = paramValue(1)
の部分を
  .Parameters.Add("userId", OracleType.VarChar, 5).Value = "a123"
  .Parameters.Add("passwd", OracleType.VarChar, 30).Value = "abc"
に修正して試して見ましたが、状況は変わらず、同じエラーになってしまいます。

じゃんぬさん、OracleClientは入っております。

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