postgresql - Postgres 函数(通过 npgsql)调用 ExecuteNonQuery 返回 -1 作为受影响行的结果

标签 postgresql npgsql

我有一个简单的函数,只需将提供给它的参数值插入到表中的列中。

当我通过命令对象上的 ExecuteNonQuery() 方法运行该函数时,即使发生了插入,我总是得到 -1。

如果我运行与文本命令相同的查询,则会给出正确的结果 1。

我是 postgresql/npgsql 新手。是否有技巧可以让函数反馈受影响的行数? SQL Server 中的“设置 nocount off”之类的东西?

编辑: 我正在使用的代码:(使用 npgsql 2.0.11)

var connStr = @"Server=127.0.0.1;Port=5432;User Id=postgres;Password=***;Database=Test;";
using (var conn = new NpgsqlConnection(connStr)) {
    conn.Open();
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "insert_something";
        cmd.CommandType = CommandType.StoredProcedure;
        NpgsqlCommandBuilder.DeriveParameters(cmd);
        cmd.Parameters["_id"].Value = 1;
        cmd.Parameters["_val"].Value = 2;
        var rowsAffected = cmd.ExecuteNonQuery();
        Console.WriteLine(rowsAffected);
    }
}

最佳答案

我没有使用过 Npgsql,但文档中有一个示例 以下代码:

NpgsqlCommand command = new NpgsqlCommand("insert into table1 values(1, 1)", conn);
Int32 rowsaffected;

try
{
    rowsaffected = command.ExecuteNonQuery();
}

如果你正在谈论像这样的一些 PostgreSQL 函数:

CREATE FUNCTION myinsert(integer) RETURNS void
LANGUAGE 'sql' AS 'INSERT INTO mytable VALUES ($1)';

并且您正在执行类似 SELECT myinsert(1); 的操作,您无法获取受影响的行数,因为您正在运行 SELECT 并且该函数内部执行的操作对您来说是不透明的.

关于postgresql - Postgres 函数(通过 npgsql)调用 ExecuteNonQuery 返回 -1 作为受影响行的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3992559/

相关文章:

.net - 如何从 postgresql 数据库生成 edmx

c# - 如何通过在 npgsql 中调用存储过程来获取游标数据

c# - Npgsql DataReader 使用 DateTime 类型表示没有时区的时间而不是 TimeSpan

sql - PostgreSQL:如果一个表被多次引用则 JOIN

postgresql - 在 PostgreSQL 中为列的不同值创建索引

ruby-on-rails - 在哈希中保存错误排序后的 activerecord-postgres-hstore

postgresql - Npgsql 是否支持 postgres 的社区版本?

windows - 无法连接到 Windows 10 上的 postgres

postgresql - 基于 PostgreSQL 中 10 分钟间隔的测量的时态数据库的平均聚合

c# - 使用 Npgsql 和 SSL 证书身份验证时出现 SSL 错误