[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 メーリングリストの案内