[seasar-dotnet:1746] Re: [DBFlute.NET]OutsideSqlにて不適切な構文がありますのエラー

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2010年 6月 19日 (土) 14:18:26 JST


久保 さん

uparrowです。

さっそく、お教えいただいたように不要なwhereに付けていたBEGIN-ENDを
取り除いたところ、想定した動きとなりました。

パラメータコメントのドキュメントもありがとうございます。
いろんな仕様があるのですね。読んで、便利に使いたいと思います。

ありがとうございました。

> 久保(jflute)です。
> 
> uparrowさん、こんにちは
> 
> 添付のSQLですが、さらに実際に実行されたSQLに
> 着目すると原因が掴みやすいです。
> (IFコメントなどの分岐が処理された後のSQL)
> 恐らく、2Way-SQLとしては正常で、パラメータコメントが
> 処理されたことで逆にSQLとして間違ったものになって
> しまっているのではないかと思われます。
> 
> DENPYO_DATE の条件が特にIFコメントで囲われて
> いないのですが、この条件は固定と考えてOKでしょうか?
> であれば、業務的にwhere句が消えることはないということで、
> BEGINコメントを利用する必要はないかと思われます。
> (この状況でBEGINを使うと、SOUKO_CDの前の
> and が消えてしまうのではないかと)
> 
> // BEGINコメント
> http://dbflute.sandbox.seasar.org/ja/manual/function/ormapper/outsidesql/pmcomment.html#begincomment
> 
> DBFlute.NETだと、S2Dao.NETの仕様なので、
> 厳密には同じではありませんが、基本仕様は同じ
> なので参考にして下さい。
> 
> 2010/6/19  <[E-MAIL ADDRESS DELETED]>:
> > お世話になっております、uparrowです。
> >
> > 大変便利にDBFluteを利用させていただいております。
> > 複雑なSQLを発行したく、初めてOutsideSqlに挑戦しております。
> >
> > OutsideSqlを用いでデータの取得を行いたいのですが、
> > 原因がわからない実行時エラーが出て困っております。
> >
> > ? ? ? ? ? ?String path = TZaikoDataBhv.PATH_selectCurrentZaiko;
> > ? ? ? ? ? ?CurrentZaikoPmb pmb = new CurrentZaikoPmb();
> > ? ? ? ? ? ?pmb.LatestMonthryTanaDate = "20091231";
> > ? ? ? ? ? ?pmb.BasisDate = "20100218";
> > ? ? ? ? ? ?pmb.FrHinmokuCd = null;
> > ? ? ? ? ? ?pmb.ToHinmokuCd = null;
> > ? ? ? ? ? ?pmb.FrSoukoCd = "0001";
> > ? ? ? ? ? ?pmb.ToSoukoCd = "0001";
> > ? ? ? ? ? ?IList<CurrentZaiko> ? ? ?curZaikoList = tZaikoDataBhv.OutsideSql().SelectList<CurrentZaiko>(path, pmb);
> >
> > このようにして外出しSQLを実行したのですが、
> > SelectListのところでExceptionが発生します。
> > 使用しているSQLのファイルは添付したものとなります。
> > (実際はもっと複雑なSQLなのですが、原因と思われる部分に着目し一部を切り出しました。)
> >
> > ex.Messageには次のようなメッセージが設定されておりました。
> >
> > ==== ここから ====
> > Look! Read the message below.
> > /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> > The SQL failed to execute!
> >
> > [Advice]
> > Please confirm the Exception message.
> >
> > [Exception]
> > Seasar.Framework.Exceptions.SQLRuntimeException
> > [ESSR0071]SQLException occured, because System.Data.SqlClient.SqlException: 'SOUKO_CD' 付近に不適切な構文があります。
> > ? 場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
> > ? 場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
> > ? 場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
> > ? 場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
> > ? 場所 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
> > ? 場所 System.Data.SqlClient.SqlDataReader.get_MetaData()
> > ? 場所 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
> > ? 場所 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
> > ? 場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
> > ? 場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
> > ? 場所 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
> > ? 場所 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
> > ? 場所 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
> > ? 場所 Seasar.Framework.Util.CommandUtil.ExecuteReader(IDataSource dataSource, IDbCommand cmd)
> >
> > [NextException]
> > System.Data.SqlClient.SqlException
> > 'SOUKO_CD' 付近に不適切な構文があります。
> > ?ErrorCode = -2146232060
> > ?HelpLink ?=
> > ==== ここまで ====
> >
> > なお、
> > ? ? ? ? ? ?pmb.FrSoukoCd = null;
> > ? ? ? ? ? ?pmb.ToSoukoCd = null;
> > とすると、例外が発生せず、データの取得は成功します。
> > 条件句の部分が問題なのかもしれませんが、具体的に何が間違っているのかわからない状態です。
> > サンプルを参考に、/*IF*/ を利用したつもりなのですが。。。
> >
> > なにか、方法に誤りがあるのでしょうか?
> > または、問題となっている箇所がわかる方法はございますでしょうか?
> >
> > このSQLを発行すると問題なくデータが取得できますし、
> > outside-sql-test.batも成功しました。
> >
> > 使用しているDBFluteはdbflute-0.8.9.9となります。
> >
> > 以上、よろしくお願いいたします。
> > --
> > <[E-MAIL ADDRESS DELETED]>
> >
> > _______________________________________________
> > seasar-dotnet mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> >
> >
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet

-- 
<[E-MAIL ADDRESS DELETED]>



seasar-dotnet メーリングリストの案内