###前提・実現したいこと
WindowsフォームアプリケーションよりNpgsql経由でDBへアクセスする際、あらかじめ作ったストアドのOUTパラメータを受け取ることができません(コマンドプロンプトで実行するとうまく結果を受け取れます)。
フォーム側でSQL直打ちすれば結果は受け取れるのですが、使えるのであればストアドにしたいと思っています。C#.NET、PostgreSQLどちらも日が浅く、根本的な勘違い(無知)かもしれませんが、ご教示ください。
###発生している問題・エラーメッセージ
Field not found in row:username
###該当のソースコード
作成したストアド create or replace function db_login(in varchar, in varchar, out varchar, out varchar) as 'select username, userstatus from 表名 where userid = $1 and password = $2' language 'sql'; 上記を実行 select db_login('hoge','fuga'); db_login ----------- ("ほげさん", active) (1行) フォーム側 Using (NpgsqlConnection con = new NpgsqlConnection(接続文字列)) { using (NpgsqlCommand cmd = new NpgsqlCommand("",con)) { useridとpasswordをNpgsqlParameterへ格納 // これだとうまくいきます cmd.commandText="select username, userstatus from 表名 where userid = :userid and password = :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)
回答4件
あなたの回答
tips
プレビュー