- PR -

VWD2005のクエリビルダで作成したSQL文がエラーになる

1
投稿者投稿内容
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-09-19 16:07
いつもお世話になっております。

Visual Web Developer 2005
Oracle10g
にて開発を行っております。

SQLDataSourceをデザイナ上にドラック&ドロップして、「データソースの構成」を選択し、クエリビルダにてSQL文を作成&実行確認したのですが、クエリのテストの段階でエラーになってしまいます。


クエリビルダ画面において、テーブルを追加し、生成されたSQL文は以下のようになります。
SELECT YOSAN.NO
FROM YOSAN INNER JOIN KESSAI ON YOSAN.NO = KESSAI.NO

クエリビルダ内の「クエリの実行」において実行出来たことが確認できたため、そのまま
「次へ」ボタンで画面を進み、クエリのテスト画面で再度「クエリのテスト」ボタンを押してみたところ

「構文エラー: '.'、識別子または引用符で囲まれた識別子が必要です。」

というエラーが表示されて、SQL文を実行することができませんでした。


生成されたSQL文をコピー&ペーストしてみると、何の問題もなくSELECT結果が出力されているので、SQL文自体には間違いはないと思うのですが・・・。
クエリビルダで作成したSQL文は、そのまま使用することができない場合があるのでしょうか?
(どうもINNER JOINを追加すると、エラーになってしまいます。)
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-09-19 17:09
MSDNフォーラムにも同じ問題がありました
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=663253&SiteID=7

僕は未検証なのですが、
inner join などを使わずに結合するとうまく行くようですね。。。
プロバイダーは何を使用していますか?
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-09-20 09:38
かるあ様、ご返答ありがとうございます。

MSDNフォーラムにあった問題とまったく同じです。
あちらにも書かれているとおり、たしかにINNER JOINをはずしてみたら、エラーを出力しなくなりました。
(LEFT JOINなどで回避)

INNER JOINを使わずにやってみて、何とか回避はできました。
「一応、エラーが発生しても [完了] すれば良さそうです。」
とのことが書いてありましたが、エラーでも問題なさそうですけれども、エラーのままで使うというのも怖い。(^^;

プロバイダーとは、ConnectionString内にて使用しているものでしょうか?
であれば、web.config内にて以下のように設定しております。
<add name="ConnectionString" connectionString="Data Source=ora***_***.***.***.***;Persist Security Info=True;User ID=TEST;Password=TEST;"
providerName="System.Data.OracleClient" />
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-09-20 15:50
引用:

NGOさんの書き込み (2006-09-20 09:38) より:

MSDNフォーラムにあった問題とまったく同じです。
あちらにも書かれているとおり、たしかにINNER JOINをはずしてみたら、エラーを出力しなくなりました。
(LEFT JOINなどで回避)

INNER JOINを使わずにやってみて、何とか回避はできました。
「一応、エラーが発生しても [完了] すれば良さそうです。」
とのことが書いてありましたが、エラーでも問題なさそうですけれども、エラーのままで使うというのも怖い。(^^;


確かにエラーのまま使うというのは気持ちが良くありませんね、
.NET Framework が問題なのか Oracle が問題なのか。。。

MSDN フィードバックにも似たような問題は無いみたいですね、
フィードバックをあげてみてはどうでしょうか。

引用:

プロバイダーとは、ConnectionString内にて使用しているものでしょうか?
であれば、web.config内にて以下のように設定しております。
<add name="ConnectionString" connectionString="Data Source=ora***_***.***.***.***;Persist Security Info=True;User ID=TEST;Password=TEST;"
providerName="System.Data.OracleClient" />


ODT.NET だと Oracle 純正のビルダーなどが使えるので、
こちらでやったらどうかな、と思いました。
あいにく、現在は調査できる環境に無いのでどうなるかわかりませんが。。。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-09-20 18:02
試してみました。

WHERE 区に結合条件を書くことでもうまく行きますが
JOIN でもうまく行くみたいですね。
コード:
SELECT YOSAN.NO
  FROM YOSAN 
       INNER JOIN KESSAI 
          ON YOSAN.NO = KESSAI.NO



コード:
SELECT YOSAN.NO
  FROM YOSAN 
       JOIN KESSAI 
          ON YOSAN.NO = KESSAI.NO


他に OUTER JOIN とか CROSS JOIN, NATUAL JOIN は問題ないですね。
何で INNER JOIN だけ駄目なんだろう
NGO
常連さん
会議室デビュー日: 2005/06/15
投稿数: 29
投稿日時: 2006-09-21 11:27
>>かるあ様
・結合条件を書くこと
・INNERをはずす
ということで、回避可能なわけですか・・・試験結果につきましては、大変参考になりました。
ありがとうございました。

Oracle上ではなんら問題なく
INNER JOIN
が動いておりましたので、.NETの問題なのかもしれませんね。

1

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