質問: :password"; // これがダメ cmd.commandText="select db_login(:userid, :password)"; 以下、NpgsqlDataReaderで値の受け取り部分で「Field not found in row:username」 } } ``` ### 試したこと NpgsqlParameterにOUTパラメーターを作ろうとした →ParameterDirectionがNpgsqlではなくSystem.Dataにしか表示されない CommandTypeをStoredProcedureにした →cmd.ExecuteNonQuery()で{42601:syntax error at or near \"select\""} ### 補足情報(言語/FW/ツール等のバージョンなど) PostgreSQL(Windows 32bit 9.6.3)
回答: ``` cmd.commandText="select db_login(:userid, :password)"; ``` 上記だと戻りは'(xxx,xxx)'のように値の列挙で返却されるだけです。 db_login()のOUTパラメータには名称が無いので、名称で参照されるなら名称を付ける必要があります。 ※Npgsqlで$1,$2のように順序で取得する方法があるかは分かりません。 ストアドを変更しない場合は以下のようになります。 ``` cmd.commandText="select * from db_login(:userid, :password) as w(username, userstatus)"; ``` ※*で取得できないようであれば、カラム名でselectしてみて下さい。 ただ、今後の拡張があれば別ですが、それが無いならこんなに単純な処理をわざわざストアドにしなくても良い気がしますが。