C# Npgsql,支持调用过程吗?

C# Npgsql, Call of procedure supported ?

关于 postgresSQL(版本 11)的新更新。现在支持程序。可以使用 CREATE PROCEDURE 命令创建过程,并使用 CALL 命令执行。

CREATE PROCEDURE MyInsert(_sno text, _eid text, _sd date)
LANGUAGE SQL
AS $$
    INSERT INTO app_for_leave(sno, eid, sd)
    VALUES(_sno, _eid, _sd);   
$$;

CALL MyInsert('4','5','2013-04-04');

现在支持 "CALL" 吗?

目前我只能通过构建一个字符串作为命令然后执行它来使其工作。 例如

using (var conn = new NpgsqlConnection(_connectionString))
{
         conn.Open();
          using (var cmd = conn.CreateCommand())
          {
               cmd.CommandText = "CALL MyInsert('4','5','2013-04-04')";
               cmd.ExecuteNonQuery();
          }
         conn.Close();
}

如果有更好的方法在不构建查询字符串的情况下执行 "MyInsert",请告诉我。这很容易受到 sql 注入的影响,因为它不是准备好的语句。

提前致谢!

使用 CALL proc_name() 创建常规命令非常适合执行存储过程 - 没有其他真正需要的东西。这一点都不会或多或少地受到 SQL 注入的影响:您仍然可以通过指定参数占位符(例如 @param1、@param2)照常传递参数。请注意,参数和占位符也与准备好的语句无关 - 使用非准备语句

发送参数(因此可以防止 SQL 注入)是完全有效的

PostgreSQL 协议对调用函数或过程没有任何特殊规定。即使当你使用 CommandType.StoredProcedure 调用函数时,所有这一切都是让 Npgsql 在后台构造一个 SELECT func_name() 并将其作为普通命令发送。