- ベストアンサー
C#のora-00933エラーについて
- C#のプログラムでグリッドビューにSQL文で取得したデータを表示する際、ora-00933エラーが出ています。具体的には、oraAdp.Fill(this.m_dsGridBind,"MEISAI")の行でora-00933:式がありませんというエラーが表示されます。
- エラーメッセージ「ora-00933:式がありません」とは、SQL文の構文に誤りがあることを示しています。この場合、strSQLのSQL文に間違いがある可能性があります。指定したテーブルやカラムが存在しない、演算子や条件式の記述が間違っている、間にスペースが必要な箇所でスペースが抜けているなど、構文エラーが発生している可能性があります。
- ora-00933エラーを解決するためには、以下の点をチェックしてみてください。まず、strSQLのSQL文が正しく記述されているかを確認してください。テーブルやカラムの名前のスペルミスや抜け漏れがないか、演算子や条件式の記述が正しいかを確認しましょう。また、SQL文の実行時に必要なパラメータ(dateTimePicker1.TextやdateTimePicker2.Textなど)が正しく指定されているかも確認してください。もし間違いがないのにエラーが発生する場合は、データベースの接続情報や環境設定に問題がある可能性も考えられますので、それらも確認してみてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3は、betweenが対象とする列(Kounyurireki.Hiduke?)の記述が欠けたままなので 適宜修正してください。
その他の回答 (3)
- bin-chan
- ベストアンサー率33% (1403/4213)
> ora-00905:キーワードが見つかりませんと 「解決した」とは「betweenの後ろに列を追加した結果、正常動作に至った」ですか? その後別な問題が生じた?正常動作に至ってないでしょ。 ora-00905は、対を成すキーワードが見つからないといっている。 bewteenには範囲のfromとtoを示すためのandが必要だが、それが欠けてる。 今回の場合、betweenの後に出てくる and は"'and'"が正しい。 構文はbewtten <列名> <範囲from> and <範囲to>だけど、 文字列である範囲from・範囲toを括るシングルクォートの記述が足りない。 誤)between<列名>'2010/10/01and2010/11/30' 正)between <列名> '2010/10/01' and '2010/11/30' strSQL を編集し終わった段階でデバッグ表示させ、SQL*Plusにでも貼り付けて 試験する習慣つけたほうが良いと思います。 また無駄なようでも、strSQLの編集を分けて書くと可読性と移植性が向上します。 #1の通り、適宜半角スペースを入れること。特にカンマの次。ピリオドとの誤読が減らせます。 strSQL = "select Kounyurireki.Hiduke, SyohinHyo.Syouhinmei, SyouhinHyo.Tanka, Kounyurireki.Suryou " strSQL = strSQL & "from SyohinHyo, Kounyurireki " strSQL = strSQL & "where Kounyurireki.Syohinbago = SyohinHyo.Syouhinbangou " strSQL = strSQL & "and between '"+ dateTimePicker1.Text + "' and '" + dateTimePicker2.Text+"'"; aliasも研究してね。記述しやすいので間違いが少なくなりますよ。 strSQL = "select K.Hiduke, S.Syouhinmei, S.Tanka, K.Suryou " strSQL = strSQL & "from SyohinHyo S, Kounyurireki K " strSQL = strSQL & "where K.Syohinbago = S.Syouhinbangou " strSQL = strSQL & "and between '"+ dateTimePicker1.Text + "' and '" + dateTimePicker2.Text+"'";
- bin-chan
- ベストアンサー率33% (1403/4213)
投稿が二重になってたらすみません。 SQL文に誤りがあります。 where Kounyurireki.Syohinbago = SyohinHyo.Syouhinbangou and between'"+ dateTimePicker1.Text + "and" + dateTimePicker2.Text+"'"; where Kounyurireki.Syohinbago = SyohinHyo.Syouhinbangou までは良いのですが、 その次の and とbetween の間に列が記述されていませんよ。(Kounyurireki.Hidukeかな?)
- bin-chan
- ベストアンサー率33% (1403/4213)
SQL文のWhereで、betweenがおかしいように思います。 (Betweenの前に列名が無い) カンマの後ろに半角スペース入れる習慣つけると読みやすいですよ。
補足
解決しました!!がora-00905:キーワードが見つかりませんと出たのですがどうすればよいでしょうか?質問とは別ですが回答していただければとてもありがたいです。