[pgsql-jp: 37042] Npgsql接続でのストアドプロシージャ起動について

toronet 2002 toronet2002 @ hotmail.com
2006年 5月 15日 (月) 19:03:42 JST


こんにちは。

Npgsql接続でのストアドプロシージャ起動に
ついて質問させてください。

環境は下記のとおりです。
 DBサーバー・クライアントはWindowsXP、
 PostgreSQL 8.1.3、Visual Studio 2005 .NET Framework 2.0
 C#を利用して開発しています。

【現象】
 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();  // ここでエラーになります

      if (Convert.ToInt32(command.Parameters["@RetVal"].Value) == 0)
      {
          MessageBox.Show("正常");
      }
      else
      {
          MessageBox.Show("異常");
      }
  }
  catch (Exception ex)
  {
      MessageBox.Show(ex.ToString());
  }
  finally
  {
      conn.Close();
  }





pgsql-jp メーリングリストの案内