[DBFLUTE-324] {C#}: OUTパラメータを含んだストアドプロシージャの実行(ResultSetは除く) Created: 2008-09-07  Updated: 2008-09-25  Resolved: 2008-09-25

Status: Closed
Project: DBFlute
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Major
Reporter: jflute Assignee: jflute
Resolution: Fixed Votes: 0
Labels: None


 Description   

S2Dao.NETを参考に



 Comments   
Comment by jflute [ 2008-09-25 ]

Oracleでもできた。

Comment by jflute [ 2008-09-22 ]

C#からOracleにつなぐやり方が不明。
Oracleのデータプロバイダをインストールするらしいが、
ドライバが利用したいだけなのにインストールすること自体が
なんとなく拒否反応が出るのと(DDLだけダウンロードさせてくれればいいのに)、
インストールしようとしたらなぜかSunJDK1.4やら何やら色んなものを
強制インストールしようとしたので中断(PCに変なもの入れたくない)。

ちょと挫折するかも。。。
MySQLでOKだったのでとりあえずOKとするか!?

Comment by jflute [ 2008-09-20 ]

> 戻りのパラメータの値が「DBNull」の場合に
ストアド内でOUTパラメータをnullに設定して何が帰ってくるかを試して、
その結果次第でどうすればよいか決める。

Comment by jflute [ 2008-09-20 ]

IDbDataParameter.Sizeは、指定しない場合はパラメータ値から推論されるそうだ。
とりあえずはそれにお任せすることとする。
(問題が発生してから対応)

Comment by jflute [ 2008-09-20 ]

Oracleのデータプロバイダについて
http://codezine.jp/article/detail/1200?p=1

Comment by jflute [ 2008-09-18 ]

IDbDataParameterの扱いを変えたら正常に動いた。
しかし、なぜだかわからない

                IDbDataParameter parameter = command.CreateParameter();
                parameter.ParameterName = parameterName;
                parameter.Direction = ppt.ParameterDirectionType;
                parameter.Value = ppt.GetValue(dto);
                parameter.DbType = dbType;

                // [Under Review]: @jflute -- If this is valid, the exception occured on MySQL.
                // parameter.Size = 4096;

また、戻りのパラメータの値が「DBNull」の場合に
一体どうしたものか不明。(OUTパラメータのときにnullで反映した方がよい!?)

Comment by jflute [ 2008-09-18 ]

かなりいいところまできて、この例外。
原因が不明なので、とっととnOracleExampleの方で試すか。。。

System.ArgumentOutOfRangeException: インデックスおよび長さは文字列内の場所を参照しなければなりません。
パラメータ名: length
   場所 System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
   場所 MySql.Data.Types.MySqlString.Serialize(PacketWriter writer, Boolean binary, Object value, Int32 length)
   場所 MySql.Data.MySqlClient.MySqlParameter.Serialize(PacketWriter writer, Boolean binary)
   場所 MySql.Data.MySqlClient.MySqlCommand.SerializeParameter(PacketWriter writer, String parmName)
   場所 MySql.Data.MySqlClient.MySqlCommand.PrepareSqlBuffers(String sql)
   場所 MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
   場所 Seasar.Framework.Util.CommandUtil.ExecuteNonQuery(IDataSource dataSource, IDbCommand cmd)
Comment by jflute [ 2008-09-09 ]

ProcedureMetaDataなどのS2Daoクラスは独自に作成する。

Generated at Mon Dec 15 11:20:34 JST 2025 using Jira 10.6.1#10060001-sha1:a6461e220f274b29ced7ac9295492f2465fe5ef5.