[pgsql-jp: 37043] Re: Npgsql接続でのストアドプロシージャ起動について
TAKATSUKA Haruka
harukat @ epoque.co.jp
2006年 5月 16日 (火) 01:04:30 JST
高塚です。
PostgreSQLのストアドプロシージャは、あくまで「ユーザ定義関数」
なので、関数含めたSELECT文で呼ぶものでは?
"SELECT test22(?, ?)"
など。
# むしろ ODBCで = CALL が通るのに驚きです。すごいですね。
On Mon, 15 May 2006 10:03:42 +0000
"toronet 2002" <toronet2002 @ hotmail.com> wrote:
> 【現象】
> Npgsqlドライバを利用して、データの参照、更新などは正しく行え
> ましたがストアドプロシージャを利用しての更新でエラーになります。
> 『syntax error at or near "{" Severity: ERROR Code: 42601』
> というエラーができます。(ExecuteNonQuery() でエラー)
> ちなみに、Odbc接続ではこのストアドプロシージャは正しく実行でき
> DB更新が行えました。
>
> NpgsqlでConnectionをオープンし、コマンドでストアド関数(test22)を指定し
> パラメータを追加後にExecuteNonQuery()で実行するものです。
> ストアド関数(test22)は、第1パラメータで抽出したレコードを、
> 第2パラメータの内容に更新するものです。戻り値は処理結果コード。
>
> Npgsqlでのストアド実行方法を、ご存知の方がおられましたら
> 教えて頂けないでしょうか。初心者の投稿で申し訳ございません。
>
> 宜しくお願い致します。
>
>
> 【コード】
> NpgsqlConnection conn
> = new NpgsqlConnection("Server=localhost;Port=5432;
> User Id=postgres;Password=xxxx;Database=testdb;");
>
> conn.Open(); // コネクションオープン
>
> NpgsqlCommand command = new NpgsqlCommand();
> command.Connection = conn;
>
> try
> {
> //------------------------------------------------//
> // ストアドプロシージャを起動
> //------------------------------------------------//
> command.CommandText = "{? = CALL test22(?, ?)}";
> command.CommandType = CommandType.StoredProcedure;
>
> // パラメータの設定
>
> // 戻り値
> command.Parameters.Add("@RetVal",
> NpgsqlTypes.NpgsqlDbType.Integer);
> // パラメータ1
> command.Parameters.Add("@Name",
> NpgsqlTypes.NpgsqlDbType.Char, 40);
> // パラメータ2
> command.Parameters.Add("@Shozoku",
> NpgsqlTypes.NpgsqlDbType.Char, 5);
>
> command.Parameters["@RetVal"].Direction
> = ParameterDirection.ReturnValue;
> command.Parameters["@Name"].Value
> = textBox2.Text;
> command.Parameters["@Shozoku"].Value
> = textBox1.Text;
>
> // ストアド起動
> command.ExecuteNonQuery(); // ここでエラーになります
--
TAKATSUKA Haruka / harukat at epoque.co.jp
pgsql-jp メーリングリストの案内