- - PR -
OracleDataAdapterのFill()時にORA-00933エラーが出ます
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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-10-05 18:42
見当違いだったらごめんなさい。 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 ] | ||||
|
投稿日時: 2005-10-05 21:44
こんにちは、じゃんぬ です。
a
派生元クラスのオーバーロード全部確認してみましょう。(^-^;) DbDataAdapter.Fill メソッド ADODB.Recordset? (^-^A) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-10-06 10:00
こんにちは、じゃんぬ です。
ODP.NET だと OracleCommand.BindByName = true; でないとダメなのかな。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-10-06 12:54
じゃんぬさんこんにちは。
現在ODP.NETではなく、OracleDataAccessProvidor(System.Data.OracleClient)を使用しています。 ですのでOracleCommand.BindByName = true;が使えません。 先にお伝するべきでしたね、申し訳ありません。 引き続き調査します。もう2日間はまっています(T_T) | ||||
|
投稿日時: 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を使用して実行されたのでしょうか? | ||||
|
投稿日時: 2005-10-06 13:39
じゃあ、私も手元にあるソースを投下してみましょう。
# 問題なのは、今いる場所に OracleClient が入ってないことだったりw _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 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は入っております。 |