0

1 つの入力パラメータを使用して postgresql に関数を記述しました。.Net Windows フォームからこの関数を呼び出したいのですが、次のようなエラーが発生します: エラー: 42601: »'TestUGI'« での構文エラー これは私のコードです:

Npgsql.NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=DB3;User Id=postgres;Password=123456;");
            conn.Open();
            NpgsqlCommand cmd = new NpgsqlCommand("'TestUGI'",conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@tablename", "'csnnutzer'");
            cmd.ExecuteNonQuery();
4

3 に答える 3

0

機能を見せてください。それは大いに役立つでしょう。たとえば、関数がレコードを返す場合、別の種類の呼び出しを行う必要があります。

エラー42883は、関数が未定義であることを示しています。それには簡単な理由があります。あなたがコードを見せれば、私たちはあなたが見つけるのを手伝うことができます。不明なパラメータは問題ではありません。それを読んでみると、長さが指定されていないテキストやvarcharがあることがわかります。

キャピタライゼーションは正しいですか?関数「testUGI」と「TestUgi」は異なります。

関数がレコードを返さない場合は、クエリを実行する必要があります。これは、独自の構文(呼び出しなど)を持つMySQLのストアドプロシージャとは異なります。postgresqlには、関数selectステートメントの呼び出しがあります。

いくつかの例:

select func();
select * from func();
select * from func() as (id int, name varchar);

最初の関数は、integerやvarcharなどの単純なデータ型を返すことができます。テーブルの行が返されたときの2番目のステートメント。レコードを返すときの最後のもの。

于 2013-01-16T21:58:33.087 に答える
0

関数を呼び出すには

select TestUGI('csnnutzer');

PostgreSQL では関数を「ただ呼び出す」ことはできません。

于 2013-01-11T12:02:08.503 に答える
0

一重引用符を取り出します。

NpgsqlCommand cmd = new NpgsqlCommand("TestUGI",conn);
...
cmd.Parameters.AddWithValue("@tablename", "csnnutzer");

ADO.Net では、パラメーターの型を渡す必要があります。

cmd.Parameters.Add("@tablename", SqlDbType.VarChar, 16);

でそれを行う方法を見つけてみてくださいNpgSQL

于 2013-01-11T12:10:33.923 に答える